home *** CD-ROM | disk | FTP | other *** search
/ Compendium Deluxe 2 / LSD and 17bit Compendium Deluxe - Volume II.iso / a / prog / misc / interfaces3_5.lha / Interfaces / Graphics.mod < prev    next >
Text File  |  1994-11-06  |  115KB  |  2,672 lines

  1. (*
  2. (*
  3. **  Amiga Oberon Interface Module:
  4. **  $VER: Graphics.mod 40.15 (6.11.94) Oberon 3.5
  5. **
  6. **   © 1993 by Fridtjof Siebert
  7. **   updated for V39, V40 by hartmut Goebel
  8. *)
  9. *)
  10.  
  11. MODULE Graphics;
  12.  
  13. IMPORT
  14.   e * := Exec,
  15.   u * := Utility,
  16.   h * := Hardware,
  17.   SYSTEM *;
  18.  
  19. TYPE
  20.   RectanglePtr            * = UNTRACED POINTER TO Rectangle;
  21.   Rect32Ptr               * = UNTRACED POINTER TO Rect32;
  22.   PointPtr                * = UNTRACED POINTER TO Point;
  23.   BitMapPtr               * = UNTRACED POINTER TO BitMap;
  24.   LayerPtr                * = UNTRACED POINTER TO Layer;
  25.   ClipRectPtr             * = UNTRACED POINTER TO ClipRect;
  26.   CopInsPtr               * = UNTRACED POINTER TO CopIns;
  27.   CopInsCLPtr             * = UNTRACED POINTER TO CopInsCL;
  28.   CprlistPtr              * = UNTRACED POINTER TO Cprlist;
  29.   CopListDummyPtr         * = UNTRACED POINTER TO CopListDummy;
  30.   CopListPtr              * = UNTRACED POINTER TO CopList;
  31.   CopList13Ptr            * = UNTRACED POINTER TO CopList13;
  32.   UCopListPtr             * = UNTRACED POINTER TO UCopList;
  33.   CopinitPtr              * = UNTRACED POINTER TO Copinit;
  34.   ExtendedNodePtr         * = UNTRACED POINTER TO ExtendedNode;
  35.   MonitorSpecPtr          * = UNTRACED POINTER TO MonitorSpec;
  36.   AnalogSignalIntervalPtr * = UNTRACED POINTER TO AnalogSignalInterval;
  37.   SpecialMonitorPtr       * = UNTRACED POINTER TO SpecialMonitor;
  38.   QueryHeaderPtr          * = UNTRACED POINTER TO QueryHeader;
  39.   DisplayInfoPtr          * = UNTRACED POINTER TO DisplayInfo;
  40.   DimensionInfoPtr        * = UNTRACED POINTER TO DimensionInfo;
  41.   MonitorInfoPtr          * = UNTRACED POINTER TO MonitorInfo;
  42.   NameInfoPtr             * = UNTRACED POINTER TO NameInfo;
  43.   VSpritePtr              * = UNTRACED POINTER TO VSprite;
  44.   BobPtr                  * = UNTRACED POINTER TO Bob;
  45.   AnimCompPtr             * = UNTRACED POINTER TO AnimComp;
  46.   AnimObPtr               * = UNTRACED POINTER TO AnimOb;
  47.   DBufPacketPtr           * = UNTRACED POINTER TO DBufPacket;
  48.   CollTablePtr            * = UNTRACED POINTER TO CollTable;
  49.   IsrvstrPtr              * = UNTRACED POINTER TO Isrvstr;
  50.   LayerInfoPtr            * = UNTRACED POINTER TO LayerInfo;
  51.   AreaInfoPtr             * = UNTRACED POINTER TO AreaInfo;
  52.   TmpRasPtr               * = UNTRACED POINTER TO TmpRas;
  53.   GelsInfoPtr             * = UNTRACED POINTER TO GelsInfo;
  54.   RastPortPtr             * = UNTRACED POINTER TO RastPort;
  55.   RegionRectanglePtr      * = UNTRACED POINTER TO RegionRectangle;
  56.   RegionPtr               * = UNTRACED POINTER TO Region;
  57.   BitScaleArgsPtr         * = UNTRACED POINTER TO BitScaleArgs;
  58.   SimpleSpritePtr         * = UNTRACED POINTER TO SimpleSprite;
  59.   TextAttrPtr             * = UNTRACED POINTER TO TextAttr;
  60.   TTextAttrPtr            * = UNTRACED POINTER TO TTextAttr;
  61.   TextFontPtr             * = UNTRACED POINTER TO TextFont;
  62.   TextFontExtensionPtr    * = UNTRACED POINTER TO TextFontExtension;
  63.   ColorFontColorsPtr      * = UNTRACED POINTER TO ColorFontColors;
  64.   ColorTextFontPtr        * = UNTRACED POINTER TO ColorTextFont;
  65.   TextextentPtr           * = UNTRACED POINTER TO Textextent;
  66.   ViewPortPtr             * = UNTRACED POINTER TO ViewPort;
  67.   ViewPtr                 * = UNTRACED POINTER TO View;
  68.   ViewExtraPtr            * = UNTRACED POINTER TO ViewExtra;
  69.   ViewPortExtraPtr        * = UNTRACED POINTER TO ViewPortExtra;
  70.   RasInfoPtr              * = UNTRACED POINTER TO RasInfo;
  71.   ColorMapPtr             * = UNTRACED POINTER TO ColorMap;
  72.   GfxBasePtr              * = UNTRACED POINTER TO GfxBase;
  73.   VecInfoPtr              * = UNTRACED POINTER TO VecInfo;
  74.   ExtSpritePtr            * = UNTRACED POINTER TO ExtSprite;
  75.   PaletteExtraPtr         * = UNTRACED POINTER TO PaletteExtra;
  76.   DBufInfoPtr             * = UNTRACED POINTER TO DBufInfo;
  77.  
  78.   Rectangle * = STRUCT
  79.     minX*, minY* : INTEGER;
  80.     maxX*, maxY* : INTEGER;
  81.   END;
  82.  
  83.   Rect32 * = STRUCT
  84.     minX*, minY* : LONGINT;
  85.     maxX*, maxY* : LONGINT;
  86.   END;
  87.  
  88.   Point * = STRUCT
  89.     x*,y*: INTEGER;
  90.   END;
  91.  
  92.   PLANEPTR * = e.APTR;
  93.  
  94.   BitMap * = STRUCT
  95.     bytesPerRow *: INTEGER;
  96.     rows        *: INTEGER;
  97.     flags       *: e.BYTE;
  98.     depth       *: SHORTINT;
  99.     pad         *: INTEGER;
  100.     planes      *: ARRAY 8 OF PLANEPTR;
  101.   END;
  102.  
  103. CONST
  104. (* flags for AllocBitMap, etc. *)
  105.   bmbClear       * = 0;
  106.   bmbDisplayable * = 1;
  107.   bmbInterleaved * = 2;
  108.   bmbStandard    * = 3;
  109.   bmbMinplanes   * = 4;
  110.  
  111. (* the following are for GetBitMapAttr() *)
  112.   bmaHeight * = 0;
  113.   bmaDepth  * = 4;
  114.   bmaWidth  * = 8;
  115.   bmaFlags  * = 12;
  116.  
  117. TYPE
  118.   Layer * = STRUCT
  119.     front-, back -: LayerPtr;
  120.     clipRect     -: ClipRectPtr;       (* read by roms to find first cliprect *)
  121.     rp           -: RastPortPtr;
  122.     bounds       -: Rectangle;
  123.     reserved     -: ARRAY 4 OF e.BYTE;
  124.     priority     -: INTEGER;           (* system use only *)
  125.     flags        -: SET;               (* obscured ?, Virtual BitMap? *)
  126.     superBitMap  -: BitMapPtr;
  127.     superClipRect -: ClipRectPtr;      (* super bitmap cliprects if VBitMap != 0*)
  128.                                        (* else damage cliprect list for refresh *)
  129.     window       -: e.APTR;            (* reserved for user interface use *)
  130.     scrollX-,scrollY-: INTEGER;
  131.     cr-,cr2-,crnew -: ClipRectPtr;     (* used by dedice *)
  132.     superSaveClipRects -: ClipRectPtr; (* preallocated cr's *)
  133.     cliprects    -: ClipRectPtr;       (* system use during refresh *)
  134.     layerInfo    -: LayerInfoPtr;      (* points to head of the list *)
  135.     lock         -: e.SignalSemaphore;
  136.     backFill     -: u.HookPtr;
  137.     reserved1    -: LONGINT;
  138.     clipRegion   -: RegionPtr;
  139.     saveClipRects -: RegionPtr;        (* used to back out when in trouble*)
  140.     width-,height-: INTEGER;           (* system use *)
  141.     reserved2    -: ARRAY 18 OF e.BYTE;
  142.     (* this must stay here *)
  143.     damageList   -: RegionPtr;         (* list of rectangles to refresh through *)
  144.   END;
  145.  
  146.   ClipRect * = STRUCT
  147.     next     *: ClipRectPtr;   (* roms used to find next ClipRect *)
  148.     prev     *: ClipRectPtr;   (* ignored by roms, used by windowlib *)
  149.     lobs     *: LayerPtr;      (* ignored by roms, used by windowlib *)
  150.     bitMap   *: BitMapPtr;
  151.     bounds   *: Rectangle;     (* set up by windowlib, used by roms *)
  152.     p1*,p2   *: ClipRectPtr;   (* system reserved *)
  153.     reserved *: LONGINT;       (* system use *)
  154.     flags    *: LONGSET;       (* only exists in layer allocation *)
  155.                                (* MUST be multiple of 8 bytes to buffer *)
  156.   END;
  157.  
  158.  
  159. CONST
  160. (* internal cliprect flags *)
  161.   needsNoConcealedRasters * = 1;
  162.   needsNoLayerBlitDamage  * = 2;
  163.  
  164. (* defines for code values for getcode *)
  165.   isLessX * = 1;
  166.   isLessY * = 2;
  167.   isGrtrX * = 4;
  168.   isGrtrY * = 8;
  169.  
  170.  
  171. (* These bit descriptors are used by the GEL collide routines.
  172.  *  These bits are set in the hitMask and meMask variables of
  173.  *  a GEL to describe whether or not these types of collisions
  174.  *  can affect the GEL.  BNDRY_HIT is described further below;
  175.  *  this bit is permanently assigned as the boundary-hit flag.
  176.  *  The other bit GEL_HIT is meant only as a default to cover
  177.  *  any GEL hitting any other; the user may redefine this bit.
  178.  *)
  179.   borderHit * = 0;
  180.  
  181. (* These bit descriptors are used by the GEL boundry hit routines.
  182.  *  When the user's boundry-hit routine is called (via the argument
  183.  *  set by a call to SetCollision) the first argument passed to
  184.  *  the user's routine is the address of the GEL involved in the
  185.  *  boundry-hit, and the second argument has the appropriate bit(s)
  186.  *  set to describe which boundry was surpassed
  187.  *)
  188.   topHit    * = 1;
  189.   bottomHit * = 2;
  190.   leftHit   * = 4;
  191.   rightHit  * = 8;
  192.  
  193.  
  194. (* Copper: *)
  195. (* graphics copper list intstruction definitions *)
  196.  
  197.   move  * = 0;     (* pseude opcode for move #XXXX,dir *)
  198.   wait  * = 1;     (* pseudo opcode for wait y,x *)
  199.   next  * = 2;     (* continue processing with next buffer *)
  200.   ntLof * = 15;    (* copper instruction only for short frames *)
  201.   ntSht * = 14;    (* copper instruction only for long frames *)
  202.   ntSys * = 13;    (* copper user instruction only *)
  203.  
  204. TYPE
  205.  
  206.   CopIns * = STRUCT
  207.     opCode   *: INTEGER; (* 0 = move, 1 = wait *)
  208.     destAddr *: INTEGER; (* vertical beam wait OR
  209.                           * destination address of copper move *)
  210.     destData *: INTEGER; (* beam wait position OR
  211.                           * destination immediate data to send *)
  212.   END;
  213.  
  214.   CopInsCL * = STRUCT
  215.     opCode  *: INTEGER; (* should be 2 = next *)
  216.     nxtList *: CopListDummyPtr;
  217.   END;
  218.  
  219. (* structure of cprlist that points to list that hardware actually executes *)
  220.   Cprlist * = STRUCT
  221.     next     *: CprlistPtr;
  222.     start    *: e.APTR;     (* start of copper list *)
  223.     maxCount *: INTEGER;    (* number of long instructions *)
  224.   END;
  225.  
  226.   CopListDummy * = STRUCT END;
  227.  
  228.   CopList * = STRUCT (dummy *: CopListDummy)
  229.     next      *: CopListPtr; (* next block for this copper list *)
  230.     copList   *: CopListPtr; (* system use *)
  231.     viewPort  *: ViewPortPtr;(* system use *)
  232.     copIns    *: CopInsPtr;  (* start of this block *)
  233.     copPtr    *: CopInsPtr;  (* intermediate ptr *)
  234.     copLStart *: e.APTR;     (* mrgcop fills this in for Long Frame*)
  235.     copSStart *: e.APTR;     (* mrgcop fills this in for Short Frame*)
  236.     count     *: INTEGER;    (* intermediate counter *)
  237.     maxCount  *: INTEGER;    (* max # of copins for this block *)
  238.     dyOffset  *: INTEGER;    (* offset this copper list vertical waits *)
  239.     slRepeat  *: INTEGER;;
  240.     flags     *: SET;
  241.   END;
  242.  
  243.   CopList13 * = STRUCT (dummy *: CopListDummy)
  244.     next      *: CopList13Ptr; (* next block for this copper list *)
  245.     copList   *: CopList13Ptr; (* system use *)
  246.     viewPort  *: ViewPortPtr;  (* system use *)
  247.     copIns    *: CopInsPtr; (* start of this block *)
  248.     copPtr    *: CopInsPtr; (* intermediate ptr *)
  249.     copLStart *: e.APTR;    (* mrgcop fills this in for Long Frame*)
  250.     copSStart *: e.APTR;    (* mrgcop fills this in for Short Frame*)
  251.     count     *: INTEGER;   (* intermediate counter *)
  252.     maxCount  *: INTEGER;   (* max # of copins for this block *)
  253.     dyOffset  *: INTEGER;   (* offset this copper list vertical waits *)
  254.     cop2Start *: e.APTR;
  255.     cop3Start *: e.APTR;
  256.     cop4Start *: e.APTR;
  257.     cop5Start *: e.APTR;
  258.     slRepeat  *: INTEGER;;
  259.     flags     *: SET;
  260.   END;
  261.  
  262.  
  263. CONST
  264. (* These CopList->Flags are private *)
  265.   exactLine  = 1;
  266.   halfLine   = 2;
  267.  
  268. TYPE
  269.   UCopList * = STRUCT
  270.     next         *: UCopListPtr;
  271.     firstCopList *: CopListDummyPtr; (* head node of this copper list *)
  272.     copList      *: CopListDummyPtr; (* node in use *)
  273.   END;
  274.  
  275. (* Private graphics data structure. This structure has changed in the past,
  276.  * and will continue to change in the future. Do Not Touch!
  277.  *)
  278.  
  279.   Copinit  = STRUCT
  280.     vsyncHblank *: ARRAY 2 OF INTEGER;
  281.     diagstart   *: ARRAY 12 OF INTEGER; (* copper list for first bitplane *)
  282.     fm0         *: ARRAY 2 OF INTEGER;
  283.     diwstart    *: ARRAY 10 OF INTEGER;
  284.     bplcon2     *: ARRAY 2 OF INTEGER;
  285.     sprfix      *: ARRAY (2*8) OF INTEGER;
  286.     sprstrtup   *: ARRAY (2*8*2) OF INTEGER;
  287.     wait14      *: ARRAY 2 OF INTEGER;
  288.     normHblank  *: ARRAY 2 OF INTEGER;
  289.     jump        *: ARRAY 2 OF INTEGER;
  290.     waitForever *: ARRAY 6 OF INTEGER;
  291.     sprstop     *: ARRAY 8 OF INTEGER;
  292.   END;
  293.  
  294. CONST
  295.  
  296. (* bplcon0 defines *)
  297.   mode640  * = 15;
  298.   plnCntMsk * = {0..2};    (* how many bit planes? *)
  299.                            (* 0 = none, 1->6 = 1->6, 7 = reserved *)
  300.   plnCntShft * = 12;       (* bits to shift for bplcon0 *)
  301.   pf2pri * = 6;            (* bplcon2 bit *)
  302.   colorOn * = 9;           (* disable color burst *)
  303.   dblpf * = 10;
  304.   holdnmodify * = 11;
  305.   interlace * = 2;         (* interlace mode for 400 *)
  306.  
  307. (* bplcon1 defines *)
  308.   fineScroll      * = {0..3};
  309.   fineScrollShift * = 4;
  310.   fineScrollMask  * = {0..3};
  311.  
  312. (* display window start and stop defines *)
  313.   horizPos * = {0..6};   (* horizontal start/stop *)
  314.   vrtclPos * = {0..8};   (* vertical start/stop *)
  315.   vrtclPosShift * = 7;
  316.  
  317. (* Data fetch start/stop horizontal position *)
  318.   dftchMask * = {0..7};
  319.  
  320. (* vposr bits *)
  321.   vposrlof  * = {15};
  322.  
  323.  
  324. TYPE
  325.   ExtendedNode * = STRUCT (node *: e.Node)
  326.     subsystem *: SHORTINT;
  327.     subtype   *: SHORTINT;
  328.     library   *: LONGINT;
  329.     init      *: e.PROC;
  330.   END;
  331.  
  332. CONST
  333.   ssGraphics * = 2;
  334.  
  335.   viewExtraType       * = 1;
  336.   viewPortExtraType   * = 2;
  337.   specialMonitorType  * = 3;
  338.   monitorSpecType     * = 4;
  339.  
  340. TYPE
  341.   MonitorSpec * = STRUCT (node *: ExtendedNode)
  342.     flags        *: SET;
  343.     ratioh       *: LONGINT;
  344.     ratiow       *: LONGINT;
  345.     totalRows    *: INTEGER;
  346.     totalColorclocks       *: INTEGER;
  347.     deniseMaxDisplayColumn *: INTEGER;
  348.     beamCon0     *: INTEGER;
  349.     minRow       *: INTEGER;
  350.     special      *: SpecialMonitorPtr;
  351.     openCount    *: INTEGER;
  352.     transform    *: e.PROC;
  353.     translate    *: e.PROC;
  354.     scale        *: e.PROC;
  355.     xoffset      *: INTEGER;
  356.     yoffset      *: INTEGER;
  357.     legalView    *: Rectangle;
  358.     maxoscan     *: e.PROC;       (* maximum legal overscan *)
  359.     videoscan    *: e.PROC;       (* video display overscan *)
  360.     deniseMinDisplayColumn *: INTEGER;
  361.     displayCompatible      *: LONGINT;
  362.     displayInfoDataBase    *: e.List;
  363.     displayInfoDataBaseSemaphore *: e.SignalSemaphore;
  364.     mrgCop       *: e.PROC;
  365.     loadView     *: e.PROC;
  366.     killView     *: e.PROC;
  367.   END;
  368.  
  369. CONST
  370.  
  371.   toMonitor       * = 0;
  372.   fromMonitor     * = 1;
  373.   standardXOffset * = 9;
  374.   standardYOffset * = 0;
  375.  
  376.   msbRequestNTSC     * = 0;
  377.   msbRequestPAL      * = 1;
  378.   msbRequestSpecial  * = 2;
  379.   msbRequestA2024    * = 3;
  380.   msbDoubleSprites   * = 4;
  381.  
  382. (* obsolete, v37 compatible definitions follow *)
  383.   requestNTSC     * = 1;  (* note: this are SET-values! [hG] *)
  384.   requestPAL      * = 2;
  385.   requestSpecial  * = 4;
  386.   requestA2024    * = 8;
  387.  
  388.   defaultMonitorName     * = "default.monitor";
  389.   ntscMonitorName        * = "ntsc.monitor";
  390.   palMonitorName         * = "pal.monitor";
  391.   standardMonitorMask    * = requestNTSC + requestPAL;
  392.  
  393.   standardNTSCRows       * = 262;
  394.   standardPALRows        * = 312;
  395.   standardColorClocks    * = 226;
  396.   standardDeniseMax      * = 455;
  397.   standardDeniseMin      * = 93;
  398.   standardNTSCBeamCon    * = {};
  399.   standardPALBeamCon     * = {h.displayPal};
  400.  
  401.   specialBeamCon * = {h.varVBlank,h.loLDis,h.varVSync,h.varHSync,h.varBeam,
  402.                       h.csBlank,h.vSyncTrue};
  403.  
  404.   minNTSCRow     * = 21;
  405.   minPALRow      * = 29;
  406.   standardViewX  * = 81H;
  407.   standardViewY  * = 2CH;
  408.   standardHBStrt * = 06H;
  409.   standardHSStrt * = 0BH;
  410.   standardHSStop * = 1CH;
  411.   standardHBStop * = 2CH;
  412.   standardVBStrt * = 0122H;
  413.   standardVSStrt * = 02A6H;
  414.   standardVSStop * = 03AAH;
  415.   standardVBStop * = 1066H;
  416.  
  417.   vgaColorClocks * = standardColorClocks DIV 2;
  418.   vgaTotalRows   * = standardNTSCRows * 2;
  419.   vgaDeniseMin   * = 59;
  420.   minvgaRow      * = 29;
  421.   vgaHBStrt      * = 08H;
  422.   vgaHSStrt      * = 0EH;
  423.   vgaHSStop      * = 1CH;
  424.   vgaHBStop      * = 1EH;
  425.   vgaVBStrt      * = 0000H;
  426.   vgaVSStrt      * = 0153H;
  427.   vgaVSStop      * = 0235H;
  428.   vgaVBStop      * = 0CCDH;
  429.  
  430.   vgaMonitorName * = "vga.monitor";
  431.  
  432. (* NOTE: VGA70 definitions are obsolete - a VGA70 monitor has never been
  433.  * implemented.
  434.  *)
  435.   vga70ColorClocks * = standardColorClocks DIV 2;
  436.   vga70TotalRows  * = 449;
  437.   vga70DeniseMin  * = 59;
  438.   minvga70Row     * = 35;
  439.   vga70HBStrt     * = 08H;
  440.   vga70HSStrt     * = 0EH;
  441.   vga70HSStop     * = 1CH;
  442.   vga70HBStop     * = 1EH;
  443.   vga70VBStrt     * = 0000H;
  444.   vga70VSStrt     * = 02A6H;
  445.   vga70VSStop     * = 0388H;
  446.   vga70VBStop     * = 0F73H;
  447.  
  448.   vga70BeamCon     * = specialBeamCon / {h.vSyncTrue};
  449.   vga70MonitorName * = "vga70.monitor";
  450.  
  451.   broadcastHBStrt  * = 01H;
  452.   broadcastHSStrt  * = 06H;
  453.   broadcastHSStop  * = 17H;
  454.   broadcastHBStop  * = 27H;
  455.   broadcastVBStrt  * = 0000H;
  456.   broadcastVSStrt  * = 02A6H;
  457.   broadcastVSStop  * = 054CH;
  458.   broadcastVBStop  * = 1C40H;
  459.   broadcastBeamCon * = {h.loLDis,h.csBlank};
  460.   ratioFixedPart   * = 4;
  461.   rationUnity      * = ASH(1,ratioFixedPart);
  462.  
  463. TYPE
  464.  
  465.   AnalogSignalInterval * = STRUCT
  466.     start     *: INTEGER;
  467.     stop      *: INTEGER;
  468.   END;
  469.  
  470.   SpecialMonitor * = STRUCT (node *: ExtendedNode)
  471.     flags     *: SET;
  472.     doMonitor *: e.PROC;
  473.     reserved1 *: e.PROC;
  474.     reserved2 *: e.PROC;
  475.     reserved3 *: e.PROC;
  476.     hblank    *: AnalogSignalInterval;
  477.     vblank    *: AnalogSignalInterval;
  478.     hsync     *: AnalogSignalInterval;
  479.     vsync     *: AnalogSignalInterval;
  480.   END;
  481.  
  482.  
  483. (* the "public" handle to a DisplayInfoRecord *)
  484.  
  485.   DisplayInfoHandle * = e.APTR;
  486.  
  487. CONST
  488.  
  489. (* datachunk type identifiers *)
  490.  
  491.   dtagDisp  * = 80000000H;
  492.   dtagDims  * = 80001000H;
  493.   dtagMntr  * = 80002000H;
  494.   dtagName  * = 80003000H;
  495.   dtagVec   * = 80004000H;   (* internal use only *)
  496.  
  497. TYPE
  498.  
  499.   QueryHeader * = STRUCT
  500.     structID  *: LONGINT;    (* datachunk type identifier *)
  501.     displayID *: LONGINT;    (* copy of display record key   *)
  502.     skipID    *: LONGINT;    (* TAG_SKIP -- see tagitems.h *)
  503.     length    *: LONGINT;    (* length of local data in double-longwords *)
  504.   END;
  505.  
  506.   DisplayInfo * = STRUCT (header *: QueryHeader)
  507.     notAvailable  *: INTEGER;  (* if NULL available, else see defines *)
  508.     propertyFlags *: LONGSET;  (* Properties of this mode see defines *)
  509.     resolution    *: Point;    (* ticks-per-pixel X/Y                 *)
  510.     pixelSpeed    *: INTEGER;  (* aproximation in nanoseconds         *)
  511.     numStdSprites *: INTEGER;  (* number of standard amiga sprites    *)
  512.     paletteRange  *: INTEGER;  (* OBSOLETE - use Red/Green/Blue bits instead *)
  513.     spriteResolution *: Point; (* std sprite ticks-per-pixel X/Y    *)
  514.     pad           *: ARRAY 4 OF e.BYTE;
  515.     redBits       *: e.UBYTE;  (* number of Red bits this display supports (V39) *)
  516.     greenBits     *: e.UBYTE;  (* number of Green bits this display supports (V39) *)
  517.     blueBits      *: e.UBYTE;  (* number of Blue bits this display supports (V39) *)
  518.     pad2          *: ARRAY 5 OF e.UBYTE;  (* find some use for this. *)
  519.     reserved      *: ARRAY 2 OF LONGINT;  (* terminator *)
  520.   END;
  521.  
  522. CONST
  523.  
  524. (* availability *)
  525.  
  526.   availNoChips        * = 0001H;
  527.   availNoMonitor      * = 0002H;
  528.   availNotWithGenlock * = 0004H;
  529.  
  530. (* mode properties *)
  531.  
  532.   isLace           * = 0;
  533.   isDualPF         * = 1;
  534.   isPF2pri         * = 2;
  535.   isHAM            * = 3;
  536.   isECS            * = 4;  (*      note: ECS modes (SHIRES, VGA, and **
  537.                            **      PRODUCTIVITY) do not support      **
  538.                            **      attached sprites.                 **
  539.                            *)
  540.   isAA             * = 16; (* AA modes - may only be available
  541.                            ** if machine has correct memory
  542.                            ** type to support required
  543.                            ** bandwidth - check availability.
  544.                            ** (V39)
  545.                            *)
  546.   isPAL            * = 5;
  547.   isSprites        * = 6;
  548.   isGenlock        * = 7;
  549.   isWB             * = 8;
  550.   isDraggable      * = 9;
  551.   isPanelled       * = 10;
  552.   isBeamSync       * = 11;
  553.   isExtraHalfBrite * = 12;
  554.  
  555. (* The following DIPF_IS_... flags are new for V39 *)
  556.   isSpritesAtt      * = 13; (* supports attached sprites *)
  557.   isSpritesChngRes  * = 14; (* supports variable sprite resolution *)
  558.   isSpritesBorder   * = 15; (* sprite can be displayed in the border *)
  559.   isScandbl         * = 17; (* scan doubled *)
  560.   isSpritesChngBase * = 18; (* can change the sprite base color *)
  561.   isSpritesChngPri  * = 19; (* can change the sprite priority
  562.                             ** with respect to the playfield(s).
  563.                             *)
  564.   isDbuffer         * = 20; (* can support double buffering *)
  565.   isProgbeam        * = 21; (* is a programmed beam-sync mode *)
  566.   isForeign         * = 31; (* this mode is not native to the Amiga *)
  567.  
  568.  
  569. TYPE
  570.  
  571.   DimensionInfo * = STRUCT (header *: QueryHeader)
  572.     maxDepth        *: INTEGER;   (* log2( max number of colors ) *)
  573.     minRasterWidth  *: INTEGER;   (* minimum width in pixels      *)
  574.     minRasterHeight *: INTEGER;   (* minimum height in pixels     *)
  575.     maxRasterWidth  *: INTEGER;   (* maximum width in pixels      *)
  576.     maxRasterHeight *: INTEGER;   (* maximum height in pixels     *)
  577.     nominal      *: Rectangle;    (* "standard" dimensions        *)
  578.     maxOScan     *: Rectangle;    (* fixed, hardware dependant    *)
  579.     videoOScan   *: Rectangle;    (* fixed, hardware dependant    *)
  580.     txtOScan     *: Rectangle;    (* editable via preferences     *)
  581.     stdOScan     *: Rectangle;    (* editable via preferences     *)
  582.     pad          *: ARRAY 14 OF e.BYTE;
  583.     reserved     *: ARRAY 2 OF LONGINT;  (* terminator *)
  584.   END;
  585.  
  586.   MonitorInfo * = STRUCT (header *: QueryHeader)
  587.     mspc           *: MonitorSpecPtr; (* pointer to monitor specification  *)
  588.     viewPosition   *: Point;          (* editable via preferences          *)
  589.     viewResolution *: Point;          (* standard monitor ticks-per-pixel  *)
  590.     viewPositionRange *: Rectangle;   (* fixed, hardware dependant         *)
  591.     totalRows         *: INTEGER;     (* display height in scanlines       *)
  592.     totalColorClocks  *: INTEGER;     (* scanline width in 280 ns units    *)
  593.     minRow        *: INTEGER;         (* absolute minimum active scanline  *)
  594.     compatibility *: INTEGER;         (* how this coexists with others     *)
  595.     pad           *: ARRAY 32 OF e.BYTE;
  596.     mouseTicks    *: Point;
  597.     defaultViewPosition *: Point;     (* original, never changes *)
  598.     preferredModeID     *: LONGINT;   (* for Preferences *)
  599.     reserved      *: ARRAY 2 OF LONGINT;  (* terminator *)
  600.   END;
  601.  
  602. (******************************************************************************)
  603.  
  604. TYPE
  605. (* The following VecInfo structure is PRIVATE, for our use only
  606.  * Touch these, and burn! (V39)
  607.  *)
  608.   VecInfo  = STRUCT
  609.      header   : QueryHeader;
  610.      vec      : e.APTR;
  611.      data     : e.APTR;
  612.      type     : INTEGER;
  613.      pad      : ARRAY 3 OF INTEGER;
  614.      reserved : ARRAY 2 OF LONGINT;
  615.   END;
  616.  
  617. CONST
  618.  
  619. (* monitor compatibility *)
  620.  
  621.   mCompatMixed  * =  0;       (* can share display with other mCompatMixed *)
  622.   mCompatSelf   * =  1;       (* can share only within same monitor *)
  623.   mCompatNobody * = -1;       (* only one viewport at a time *)
  624.  
  625.   displayNameLen * = 32;
  626.  
  627. TYPE
  628.  
  629.   NameInfo * = STRUCT (header *: QueryHeader)
  630.     name     *: ARRAY displayNameLen OF CHAR;
  631.     reserved *: ARRAY 2 OF LONGINT;          (* terminator *)
  632.   END;
  633.  
  634. CONST
  635.  
  636. (* DisplayInfoRecord identifiers *)
  637.  
  638.   invalidID * = -1;
  639.  
  640. (* With all the new modes that are available under V38 and V39, it is highly
  641.  * recommended that you use either the asl.library screenmode requester,
  642.  * and/or the V39 graphics.library function BestModeIDA().
  643.  *
  644.  * DO NOT interpret the any of the bits in the ModeID for its meaning. For
  645.  * example, do not interpret bit 3 (0x4) as meaning the ModeID is interlaced.
  646.  * Instead, use GetDisplayInfoData() with DTAG_DISP, and examine the DIPF_...
  647.  * flags to determine a ModeID's characteristics. The only exception to
  648.  * this rule is that bit 7 (0x80) will always mean the ModeID is
  649.  * ExtraHalfBright, and bit 11 (0x800) will always mean the ModeID is HAM.
  650.  *)
  651.  
  652. (* normal identifiers *)
  653.  
  654.   monitorIDMask * = 0FFFF1000H;
  655.  
  656.   defaultMonitorID  * = 00000000H;
  657.   ntscMonitorID     * = 00011000H;
  658.   palMonitorID      * = 00021000H;
  659.  
  660. (* the following 22 composite keys are for Modes on the default Monitor
  661.  * ntsc & pal "flavors" of these particular keys may be made by or'ing
  662.  * the ntsc or pal MONITOR_ID with the desired MODE_KEY...
  663.  * For example, to specifically open a PAL HAM interlaced ViewPort
  664.  * (or intuition screen), you would use the modeid of
  665.  * (PAL_MONITOR_ID | HAMLACE_KEY)
  666.  *)
  667.  
  668.   loresKey                      * = 00000000H;
  669.   hiresKey                      * = 00008000H;
  670.   superKey                      * = 00008020H;
  671.   hamKey                        * = 00000800H;
  672.   loresLaceKey                  * = 00000004H;
  673.   hiresLaceKey                  * = 00008004H;
  674.   superLaceKey                  * = 00008024H;
  675.   hamLaceKey                    * = 00000804H;
  676.   loresDPFKey                   * = 00000400H;
  677.   hiresDPFKey                   * = 00008400H;
  678.   superDPFKey                   * = 00008420H;
  679.   loresLaceDPFKey               * = 00000404H;
  680.   hiresLaceDPFKey               * = 00008404H;
  681.   superLaceDPFKey               * = 00008424H;
  682.   loresDPF2Key                  * = 00000440H;
  683.   hiresDPF2Key                  * = 00008440H;
  684.   superDPF2Key                  * = 00008460H;
  685.   loresLaceDPF2Key              * = 00000444H;
  686.   hiresLaceDPF2Key              * = 00008444H;
  687.   superLaceDPF2Key              * = 00008464H;
  688.   extraHalfBriteKey             * = 00000080H;
  689.   extraHalfBriteLaceKey         * = 00000084H;
  690. (* New for AA ChipSet (V39) *)
  691.   hiresHAMKey                   * = 000008800H;
  692.   superHAMKey                   * = 000008820H;
  693.   hiresEHBKey                   * = 000008080H;
  694.   superEHBKey                   * = 0000080A0H;
  695.   hiresHAMLaceKey               * = 000008804H;
  696.   superHAMLaceKey               * = 000008824H;
  697.   hiresEHBLaceKey               * = 000008084H;
  698.   superEHBLaceKey               * = 0000080A4H;
  699. (* Added for V40 - may be useful modes for some games or animations. *)
  700.   loresSDblKey                  * = 000000008H;
  701.   loresHAMSDblKey               * = 000000808H;
  702.   loresEHBSDblKey               * = 000000088H;
  703.   hiresHAMSDblKey               * = 000008808H;
  704.  
  705. (* VGA identifiers *)
  706.  
  707.   vgaMonitorID                  * = 00031000H;
  708.  
  709.   vgaExtraLoresKey              * = 00031004H;
  710.   vgaLoresKey                   * = 00039004H;
  711.   vgaProductKey                 * = 00039024H;
  712.   vgaHAMKey                     * = 00031804H;
  713.   vgaExtraLoresLaceKey          * = 00031005H;
  714.   vgaLoresLaceKey               * = 00039005H;
  715.   vgaProductLaceKey             * = 00039025H;
  716.   vgaHAMLaceKey                 * = 00031805H;
  717.   vgaExtraLoresDPFKey           * = 00031404H;
  718.   vgaLoresDPFKey                * = 00039404H;
  719.   vgaProductDPFKey              * = 00039424H;
  720.   vgaExtraLoresLaceDPFKey       * = 00031405H;
  721.   vgaLoresLaceDPFKey            * = 00039405H;
  722.   vgaProductLaceDPFKey          * = 00039425H;
  723.   vgaExtraLoresDPF2Key          * = 00031444H;
  724.   vgaLoresDPF2Key               * = 00039444H;
  725.   vgaProductDPF2Key             * = 00039464H;
  726.   vgaExtraLoresLaceDPF2Key      * = 00031445H;
  727.   vgaLoresLaceDPF2Key           * = 00039445H;
  728.   vgaProductLaceDPF2Key         * = 00039465H;
  729.   vgaExtraHalfBriteKey          * = 00031084H;
  730.   vgaExtraHalfBriteLaceKey      * = 00031085H;
  731. (* New for AA ChipSet (V39) *)
  732.   vgaProductHAMKey              * = 000039824H;
  733.   vgaLoresHAMKey                * = 000039804H;
  734.   vgaExtraLoresHAMKey           * = vgaHAMKey;
  735.   vgaProductHAMLaceKey          * = 000039825H;
  736.   vgaLoresHAMLaceKey            * = 000039805H;
  737.   vgaExtraLoresHAMLaceKey       * = vgaHAMLaceKey;
  738.   vgaExtraLoresEHBKey           * = vgaExtraHalfBriteKey;
  739.   vgaExtraLoresEHBLaceKey       * = vgaExtraHalfBriteLaceKey;
  740.   vgaLoresEHBKey                * = 000039084H;
  741.   vgaLoresEHBLaceKey            * = 000039085H;
  742.   vgaEHBKey                     * = 0000390A4H;
  743.   vgaEHBLaceKey                 * = 0000390A5H;
  744. (* These ModeIDs are the scandoubled equivalents of the above, with the
  745.  * exception of the DualPlayfield modes, as AA does not allow for scandoubling
  746.  * dualplayfield.
  747.  *)
  748.   vgaExtraLoresDblKey           * = 000031000H;
  749.   vgaLoresDblKey                * = 000039000H;
  750.   vgaProductDblKey              * = 000039020H;
  751.   vgaExtraLoresHAMDblKey        * = 000031800H;
  752.   vgaLoresHAMDblKey             * = 000039800H;
  753.   vgaProductHAMDblKey           * = 000039820H;
  754.   vgaExtraLoresEHBDblKey        * = 000031080H;
  755.   vgaLoresEHBDblKey             * = 000039080H;
  756.   vgaProductEHBDblKey           * = 0000390A0H;
  757.  
  758. (* a2024 identifiers *)
  759.  
  760.   a2024MonitorID                * = 00041000H;
  761.  
  762.   a2024tenHertzKey              * = 00041000H;
  763.   a2024fifteenHertzKey          * = 00049000H;
  764.  
  765. (* prototype identifiers (private ) *)
  766.  
  767.   protoMonitorID                  = 00051000H;
  768.  
  769. (* These monitors and modes were added for the V38 release. *)
  770.  
  771.   euro72MonitorId               * = 000061000H;
  772.  
  773.   euro72ExtraLoresKey           * = 000061004H;
  774.   euro72LoresKey                * = 000069004H;
  775.   euro72ProductKey              * = 000069024H;
  776.   euro72HAMKey                  * = 000061804H;
  777.   euro72ExtraLoresLaceKey       * = 000061005H;
  778.   euro72LoresLaceKey            * = 000069005H;
  779.   euro72ProductLaceKey          * = 000069025H;
  780.   euro72HAMLaceKey              * = 000061805H;
  781.   euro72ExtraLoresDPFKey        * = 000061404H;
  782.   euro72LoresDPFKey             * = 000069404H;
  783.   euro72ProductDPFKey           * = 000069424H;
  784.   euro72ExtraLoresLaceDPFKey    * = 000061405H;
  785.   euro72LoresLaceDPFKey         * = 000069405H;
  786.   euro72ProductLaceDPFKey       * = 000069425H;
  787.   euro72ExtraLoresDPF2Key       * = 000061444H;
  788.   euro72LoresDPF2Key            * = 000069444H;
  789.   euro72ProductDPF2Key          * = 000069464H;
  790.   euro72ExtraLoresLaceDPF2Key   * = 000061445H;
  791.   euro72LoresLaceDPF2Key        * = 000069445H;
  792.   euro72ProductLaceDPF2Key      * = 000069465H;
  793.   euro72ExtraHalfBriteKey       * = 000061084H;
  794.   euro72ExtraHalfBriteLaceKey   * = 000061085H;
  795. (* New AA modes (V39) *)
  796.   euro72ProductHAMKey           * = 000069824H;
  797.   euro72ProductHAMLaceKey       * = 000069825H;
  798.   euro72LoresHAMKey             * = 000069804H;
  799.   euro72LoresHAMLaceKey         * = 000069805H;
  800.   euro72ExtraLoresHAMKey        * = euro72HAMKey;
  801.   euro72ExtraLoresHAMLaceKey    * = euro72HAMLaceKey;
  802.   euro72ExtraLoresEHBKey        * = euro72ExtraHalfBriteKey;
  803.   euro72ExtraLoresEHBLaceKey    * = euro72ExtraHalfBriteLaceKey;
  804.   euro72LoresEHBKey             * = 000069084H;
  805.   euro72LoresEHBLaceKey         * = 000069085H;
  806.   euro72EHBKey                  * = 0000690A4H;
  807.   euro72EHBLaceKey              * = 0000690A5H;
  808. (* These ModeIDs are the scandoubled equivalents of the above, with the
  809.  * exception of the DualPlayfield modes, as AA does not allow for scandoubling
  810.  * dualplayfield.
  811.  *)
  812.   euro72ExtraLoresDblKey        * = 000061000H;
  813.   euro72LoresDblKey             * = 000069000H;
  814.   euro72ProductDblKey           * = 000069020H;
  815.   euro72ExtraLoresHAMDblKey     * = 000061800H;
  816.   euro72LoresHAMDblKey          * = 000069800H;
  817.   euro72ProductHAMDblKey        * = 000069820H;
  818.   euro72ExtraLoresEHBDblKey     * = 000061080H;
  819.   euro72LoresEHBDblKey          * = 000069080H;
  820.   euro72ProductEHBDblKey        * = 0000690A0H;
  821.  
  822.  
  823.   euro36MonitorId               * = 000071000H;
  824.  
  825.  
  826. (* Euro36 modeids can be ORed with the default modeids a la NTSC and PAL.
  827.  * For example, Euro36 SuperHires is
  828.  * (EURO36_MONITOR_ID | SUPER_KEY)
  829.  *)
  830.  
  831.   super72MonitorId              * = 000081000H;
  832.  
  833. (* Super72 modeids can be ORed with the default modeids a la NTSC and PAL.
  834.  * For example, Super72 SuperHiresLace (800x600) is
  835.  * (SUPER72_MONITOR_ID | SUPERLACE_KEY).
  836.  * The following scandoubled Modes are the exception:
  837.  *)
  838.   super72LoresDblKey            * = 000081008H;
  839.   super72HiresDblKey            * = 000089008H;
  840.   super72SuperDblKey            * = 000089028H;
  841.   super72LoresHAMDblKey         * = 000081808H;
  842.   super72HiresHAMDblKey         * = 000089808H;
  843.   super72SuperHAMDblKey         * = 000089828H;
  844.   super72LoresEHBDblKey         * = 000081088H;
  845.   super72HiresEHBDblKey         * = 000089088H;
  846.   super72SuperEHBDblKey         * = 0000890A8H;
  847.  
  848.  
  849. (* These monitors and modes were added for the V39 release. *)
  850.  
  851.   dblNTSCMonitorId              * = 000091000H;
  852.  
  853.   dblNTSCLoresKey               * = 000091000H;
  854.   dblNTSCLoresffKey             * = 000091004H;
  855.   dblNTSCLoresHAMKey            * = 000091800H;
  856.   dblNTSCLoresHAMffKey          * = 000091804H;
  857.   dblNTSCLoresEHBKey            * = 000091080H;
  858.   dblNTSCLoresEHBffKey          * = 000091084H;
  859.   dblNTSCLoresLaceKey           * = 000091005H;
  860.   dblNTSCLoresHAMLaceKey        * = 000091805H;
  861.   dblNTSCLoresEHBLaceKey        * = 000091085H;
  862.   dblNTSCLoresDPFKey            * = 000091400H;
  863.   dblNTSCLoresDPFFFKey          * = 000091404H;
  864.   dblNTSCLoresDPFLaceKey        * = 000091405H;
  865.   dblNTSCLoresDPF2Key           * = 000091440H;
  866.   dblNTSCLoresDPF2FFKey         * = 000091444H;
  867.   dblNTSCLoresDPF2LaceKey       * = 000091445H;
  868.   dblNTSCHiresKey               * = 000099000H;
  869.   dblNTSCHiresffKey             * = 000099004H;
  870.   dblNTSCHiresHAMKey            * = 000099800H;
  871.   dblNTSCHiresHAMffKey          * = 000099804H;
  872.   dblNTSCHiresLaceKey           * = 000099005H;
  873.   dblNTSCHiresHAMLaceKey        * = 000099805H;
  874.   dblNTSCHiresEHBKey            * = 000099080H;
  875.   dblNTSCHiresEHBffKey          * = 000099084H;
  876.   dblNTSCHiresEHBLaceKey        * = 000099085H;
  877.   dblNTSCHiresDPFKey            * = 000099400H;
  878.   dblNTSCHiresDPFFFKey          * = 000099404H;
  879.   dblNTSCHiresDPFLaceKey        * = 000099405H;
  880.   dblNTSCHiresDPF2Key           * = 000099440H;
  881.   dblNTSCHiresDPF2FFKey         * = 000099444H;
  882.   dblNTSCHiresDPF2LaceKey       * = 000099445H;
  883.   dblNTSCExtraLoresKey          * = 000091200H;
  884.   dblNTSCExtraLoresHAMKey       * = 000091A00H;
  885.   dblNTSCExtraLoresEHBKey       * = 000091280H;
  886.   dblNTSCExtraLoresDPFKey       * = 000091600H;
  887.   dblNTSCExtraLoresDPF2Key      * = 000091640H;
  888.   dblNTSCExtraLoresFFKey        * = 000091204H;
  889.   dblNTSCExtraLoresHAMFFKey     * = 000091A04H;
  890.   dblNTSCExtraLoresEHBFFKey     * = 000091284H;
  891.   dblNTSCExtraLoresDPFFFKey     * = 000091604H;
  892.   dblNTSCExtraLoresDPF2FFKey    * = 000091644H;
  893.   dblNTSCExtraLoresLaceKey      * = 000091205H;
  894.   dblNTSCExtraLoresHAMLaceKey   * = 000091A05H;
  895.   dblNTSCExtraLoresEHBLaceKey   * = 000091285H;
  896.   dblNTSCExtraLoresDPFLaceKey   * = 000091605H;
  897.   dblNTSCExtraLoresDPF2LaceKey  * = 000091645H;
  898.  
  899.   dblPALMonitorId               * = 0000A1000H;
  900.  
  901.   dblPALLoresKey                * = 0000A1000H;
  902.   dblPALLoresFFKey              * = 0000A1004H;
  903.   dblPALLoresHAMKey             * = 0000A1800H;
  904.   dblPALLoresHAMFFKey           * = 0000A1804H;
  905.   dblPALLoresEHBKey             * = 0000A1080H;
  906.   dblPALLoresEHBFFKey           * = 0000A1084H;
  907.   dblPALLoresLaceKey            * = 0000A1005H;
  908.   dblPALLoresHAMLaceKey         * = 0000A1805H;
  909.   dblPALLoresEHBLaceKey         * = 0000A1085H;
  910.   dblPALLoresDPFKey             * = 0000A1400H;
  911.   dblPALLoresDPFFFKey           * = 0000A1404H;
  912.   dblPALLoresDPFLaceKey         * = 0000A1405H;
  913.   dblPALLoresDPF2Key            * = 0000A1440H;
  914.   dblPALLoresDPF2FFKey          * = 0000A1444H;
  915.   dblPALLoresDPF2LaceKey        * = 0000A1445H;
  916.   dblPALHiresKey                * = 0000A9000H;
  917.   dblPALHiresFFKey              * = 0000A9004H;
  918.   dblPALHiresHAMKey             * = 0000A9800H;
  919.   dblPALHiresHAMFFKey           * = 0000A9804H;
  920.   dblPALHiresLaceKey            * = 0000A9005H;
  921.   dblPALHiresHAMLaceKey         * = 0000A9805H;
  922.   dblPALHiresEHBKey             * = 0000A9080H;
  923.   dblPALHiresEHBFFKey           * = 0000A9084H;
  924.   dblPALHiresEHBLaceKey         * = 0000A9085H;
  925.   dblPALHiresDPFKey             * = 0000A9400H;
  926.   dblPALHiresDPFFFKey           * = 0000A9404H;
  927.   dblPALHiresDPFLaceKey         * = 0000A9405H;
  928.   dblPALHiresDPF2Key            * = 0000A9440H;
  929.   dblPALHiresDPF2FFKey          * = 0000A9444H;
  930.   dblPALHiresDPF2LaceKey        * = 0000A9445H;
  931.   dblPALExtraLoresKey           * = 0000A1200H;
  932.   dblPALExtraLoresHAMKey        * = 0000A1A00H;
  933.   dblPALExtraLoresEHBKey        * = 0000A1280H;
  934.   dblPALExtraLoresDPFKey        * = 0000A1600H;
  935.   dblPALExtraLoresDPF2Key       * = 0000A1640H;
  936.   dblPALExtraLoresFFKey         * = 0000A1204H;
  937.   dblPALExtraLoresHAMFFKey      * = 0000A1A04H;
  938.   dblPALExtraLoresEHBFFKey      * = 0000A1284H;
  939.   dblPALExtraLoresDPFFFKey      * = 0000A1604H;
  940.   dblPALExtraLoresDPF2FFKey     * = 0000A1644H;
  941.   dblPALExtraLoresLaceKey       * = 0000A1205H;
  942.   dblPALExtraLoresHAMLaceKey    * = 0000A1A05H;
  943.   dblPALExtraLoresEHBLaceKey    * = 0000A1285H;
  944.   dblPALExtraLoresDPFLaceKey    * = 0000A1605H;
  945.   dblPALExtraLoresDPF2LaceKey   * = 0000A1645H;
  946.  
  947. (* Use these tags for passing to BestModeID() (V39) *)
  948.  
  949.   specialFlags * = LONGSET{isDualPF, isPF2pri, isHAM, isExtraHalfBrite};
  950.  
  951.   bidTagDipfMustHave     * = 080000001H;  (* mask of the DIPF_ flags the ModeID must have *)
  952.                                           (* Default - NULL *)
  953.   bidTagDipfMustNotHave  * = 080000002H;  (* mask of the DIPF_ flags the ModeID must not have *)
  954.                                           (* Default - SPECIAL_FLAGS *)
  955.   bidTagViewPort         * = 080000003H;  (* ViewPort for which a ModeID is sought. *)
  956.                                           (* Default - NULL *)
  957.   bidTagNominalWidth     * = 080000004H;  (* \ together make the aspect ratio and *)
  958.   bidTagNominalHeight    * = 080000005H;  (* / override the vp->Width/Height. *)
  959.                                           (* Default - SourceID NominalDimensionInfo,
  960.                                            * or vp->DWidth/Height, or (640 * 200),
  961.                                            * in that preferred order.
  962.                                            *)
  963.   bidTagDesiredWidth     * = 080000006H;  (* \ Nominal Width and Height of the *)
  964.   bidTagDesiredHeight    * = 080000007H;  (* / returned ModeID. *)
  965.                                           (* Default - same as Nominal *)
  966.   bidTagDepth            * = 080000008H;  (* ModeID must support this depth. *)
  967.                                           (* Default - vp->RasInfo->BitMap->Depth or 1 *)
  968.   bidTagMonitorID        * = 080000009H;  (* ModeID must use this monitor. *)
  969.                                           (* Default - use best monitor available *)
  970.   bidTagSourceID         * = 08000000AH;  (* instead of a ViewPort. *)
  971.                                 (* Default - VPModeID(vp) if BIDTAG_ViewPort is
  972.                                  * specified, else leave the DIPFMustHave and
  973.                                  * DIPFMustNotHave values untouched.
  974.                                  *)
  975.   bidTagRedBits          * = 08000000BH;  (* \                            *)
  976.   bidTagBlueBits         * = 08000000CH;  (* } Match up from the database *)
  977.   bidTagGreenBits        * = 08000000DH;  (* /                            *)
  978.                                           (* Default - 4 *)
  979.   bidTagGfxPrivate         = 08000000EH;  (* Private *)
  980.  
  981.  
  982. (* VSprite flags *)
  983. (* user-set VSprite flags: *)
  984.   sUserFlags* = {0..7}; (* mask of all user-settable VSprite-flags *)
  985.   vsprite   * = 0;      (* set if VSprite, clear if Bob *)
  986.   saveBack  * = 1;      (* set if background is to be saved/restored *)
  987.   overlay   * = 2;      (* set to mask image of Bob onto background *)
  988.   mustDraw  * = 3;      (* set if VSprite absolutely must be drawn *)
  989. (* system-set VSprite flags: *)
  990.   backSaved * = 8;      (* this Bob's background has been saved *)
  991.   bobUpdate * = 9;      (* temporary flag, useless to outside world *)
  992.   gelGone   * = 10;     (* set if gel is completely clipped (offscreen) *)
  993.   vsOverflow* = 11;     (* VSprite overflow (if MUSTDRAW set we draw!) *)
  994.  
  995. (* Bob flags *)
  996. (* these are the user flag bits *)
  997.   bUserFlags * = {0..7};(* mask of all user-settable Bob-flags *)
  998.   saveBob     * = 0;    (* set to not erase Bob *)
  999.   bobIsComp   * = 1;    (* set to identify Bob as AnimComp *)
  1000. (* these are the system flag bits *)
  1001.   bWaiting    * = 8;    (* set while Bob is waiting on 'after' *)
  1002.   bDrawn      * = 9;    (* set when Bob is drawn this DrawG pass*)
  1003.   bobsAway    * = 10;   (* set to initiate removal of Bob *)
  1004.   bobNix      * = 11;   (* set when Bob is completely removed *)
  1005.   savePreserve * = 12;  (* for back-restore during double-buffer*)
  1006.   outStep     * = 13;   (* for double-clearing if double-buffer *)
  1007.  
  1008. (* defines for the animation procedures *)
  1009.   anfracsize  * = 6;
  1010.   animhalf    * = 0020H;
  1011.   ringTrigger * = 0001H;
  1012.  
  1013.  
  1014. TYPE
  1015.  
  1016. (* UserStuff definitions
  1017.  *  the user can define these to be a single variable or a sub-structure
  1018.  *  if undefined by the user, the system turns these into innocuous variables
  1019.  *  see the manual for a thorough definition of the UserStuff definitions
  1020.  *
  1021.  *)
  1022.   VUserStuff * = INTEGER;
  1023.  
  1024.   BUserStuff * = INTEGER;
  1025.  
  1026.   AUserStuff * = INTEGER;
  1027.  
  1028.  
  1029.  
  1030. (*********************** GEL STRUCTURES ***********************************)
  1031.  
  1032.   VSprite * = STRUCT
  1033.  
  1034. (* --------------------- SYSTEM VARIABLES ------------------------------- *)
  1035. (* GEL linked list forward/backward pointers sorted by y,x value *)
  1036.     nextVSprite *: VSpritePtr;
  1037.     prevVSprite *: VSpritePtr;
  1038.  
  1039. (* GEL draw list constructed in the order the Bobs are actually drawn, then
  1040.  *  list is copied to clear list
  1041.  *  must be here in VSprite for system boundary detection
  1042.  *)
  1043.     drawPath    *: VSpritePtr;   (* pointer of overlay drawing *)
  1044.     clearPath   *: VSpritePtr;   (* pointer for overlay clearing *)
  1045.  
  1046. (* the VSprite positions are defined in (y,x) order to make sorting
  1047.  *  sorting easier, since (y,x) as a long integer
  1048.  *)
  1049.     oldY *, oldX *: INTEGER;     (* previous position *)
  1050.  
  1051. (* --------------------- COMMON VARIABLES --------------------------------- *)
  1052.     flags        *: SET;       (* VSprite flags *)
  1053.  
  1054.  
  1055. (* --------------------- USER VARIABLES ----------------------------------- *)
  1056. (* the VSprite positions are defined in (y,x) order to make sorting
  1057.  *  sorting easier, since (y,x) as a long integer
  1058.  *)
  1059.     y * ,x *    : INTEGER;       (* screen position *)
  1060.  
  1061.     height     *: INTEGER;
  1062.     width      *: INTEGER;       (* number of words per row of image data *)
  1063.     depth      *: INTEGER;       (* number of planes of data *)
  1064.  
  1065.     meMask     *: SET;           (* which types can collide with this VSprite*)
  1066.     hitMask    *: SET;           (* which types this VSprite can collide with*)
  1067.  
  1068.     imageData  *: e.APTR;        (* pointer to VSprite image *)
  1069.  
  1070. (* borderLine is the one-dimensional logical OR of all
  1071.  *  the VSprite bits, used for fast collision detection of edge
  1072.  *)
  1073.     borderLine *: e.APTR;        (* logical OR of all VSprite bits *)
  1074.     collMask   *: e.APTR;        (* similar to above except this is a matrix *)
  1075.  
  1076. (* pointer to this VSprite's color definitions (not used by Bobs) *)
  1077.     sprColors  *: e.APTR;
  1078.  
  1079.     vsBob      *: BobPtr;        (* points home if this VSprite is part of
  1080.                                     a Bob *)
  1081.  
  1082. (* planePick flag:  set bit selects a plane from image, clear bit selects
  1083.  *  use of shadow mask for that plane
  1084.  * OnOff flag: if using shadow mask to fill plane, this bit (corresponding
  1085.  *  to bit in planePick) describes whether to fill with 0's or 1's
  1086.  * There are two uses for these flags:
  1087.  *      - if this is the VSprite of a Bob, these flags describe how the Bob
  1088.  *        is to be drawn into memory
  1089.  *      - if this is a simple VSprite and the user intends on setting the
  1090.  *        MUSTDRAW flag of the VSprite, these flags must be set too to describe
  1091.  *        which color registers the user wants for the image
  1092.  *)
  1093.     planePick  *: SHORTSET;
  1094.     planeOnOff *: SHORTSET;
  1095.  
  1096.     vUserExt   *: VUserStuff;    (* user definable:  see note above *)
  1097.   END;
  1098.  
  1099.   Bob * = STRUCT
  1100. (* blitter-objects *)
  1101.  
  1102. (* --------------------- SYSTEM VARIABLES --------------------------------- *)
  1103.  
  1104. (* --------------------- COMMON VARIABLES --------------------------------- *)
  1105.     flags       *: SET;     (* general purpose flags (see definitions below) *)
  1106.  
  1107. (* --------------------- USER VARIABLES ----------------------------------- *)
  1108.     saveBuffer  *: e.APTR;  (* pointer to the buffer for background save *)
  1109.  
  1110. (* used by Bobs for "cookie-cutting" and multi-plane masking *)
  1111.     imageShadow *: e.APTR;
  1112.  
  1113. (* pointer to BOBs for sequenced drawing of Bobs
  1114.  *  for correct overlaying of multiple component animations
  1115.  *)
  1116.     before      *: BobPtr;        (* draw this Bob before Bob pointed to by before *)
  1117.     after       *: BobPtr;        (* draw this Bob after Bob pointed to by after *)
  1118.  
  1119.     bobVSprite  *: VSpritePtr;    (* this Bob's VSprite definition *)
  1120.  
  1121.     bobComp     *: AnimCompPtr;   (* pointer to this Bob's AnimComp def *)
  1122.  
  1123.     dBuffer     *: DBufPacketPtr; (* pointer to this Bob's dBuf packet *)
  1124.  
  1125.     bUserExt    *: BUserStuff;    (* Bob user extension *)
  1126.   END;
  1127.  
  1128.   AnimComp * = STRUCT
  1129.  
  1130. (* --------------------- SYSTEM VARIABLES --------------------------------- *)
  1131.  
  1132. (* --------------------- COMMON VARIABLES --------------------------------- *)
  1133.     flags       *: SET;           (* AnimComp flags for system & user *)
  1134.  
  1135. (* timer defines how long to keep this component active:
  1136.  *  if set non-zero, timer decrements to zero then switches to nextSeq
  1137.  *  if set to zero, AnimComp never switches
  1138.  *)
  1139.     timer       *: INTEGER;
  1140.  
  1141. (* --------------------- USER VARIABLES ----------------------------------- *)
  1142. (* initial value for timer when the AnimComp is activated by the system *)
  1143.     timeSet      *: INTEGER;
  1144.  
  1145. (* pointer to next and previous components of animation object *)
  1146.     nextComp     *: AnimCompPtr;
  1147.     prevComp     *: AnimCompPtr;
  1148.  
  1149. (* pointer to component component definition of next image in sequence *)
  1150.     nextSeq      *: AnimCompPtr;
  1151.     prevSeq      *: AnimCompPtr;
  1152.  
  1153.     animCRoutine *: e.PROC;    (* address of special animation procedure *)
  1154.  
  1155.     yTrans       *: INTEGER;   (* initial y translation (if this is a component) *)
  1156.     xTrans       *: INTEGER;   (* initial x translation (if this is a component) *)
  1157.  
  1158.     headOb       *: AnimObPtr;
  1159.  
  1160.     animBob      *: BobPtr;
  1161.   END;
  1162.  
  1163.   AnimOb * = STRUCT
  1164.  
  1165. (* --------------------- SYSTEM VARIABLES --------------------------------- *)
  1166.     nextOb *, prevOb *: AnimObPtr;
  1167.  
  1168. (* number of calls to Animate this AnimOb has endured *)
  1169.     clock        *: LONGINT;
  1170.  
  1171.     anOldY *, anOldX *: INTEGER;            (* old y,x coordinates *)
  1172.  
  1173. (* --------------------- COMMON VARIABLES --------------------------------- *)
  1174.     anY *, anX  *: INTEGER;                 (* y,x coordinates of the AnimOb *)
  1175.  
  1176. (* --------------------- USER VARIABLES ----------------------------------- *)
  1177.     yVel *, xVel *    : INTEGER;            (* velocities of this object *)
  1178.     yAccel *, xAccel *: INTEGER;            (* accelerations of this object *)
  1179.  
  1180.     ringYTrans *, ringXTrans *: INTEGER;    (* ring translation values *)
  1181.  
  1182.     animoRoutine *: e.PROC;                 (* address of special animation
  1183.                                                procedure *)
  1184.  
  1185.     headComp     *: AnimCompPtr;            (* pointer to first component *)
  1186.  
  1187.     aUserExt     *: AUserStuff;             (* AnimOb user extension *)
  1188.   END;
  1189.  
  1190.  
  1191. (* dBufPacket defines the values needed to be saved across buffer to buffer
  1192.  *  when in double-buffer mode
  1193.  *)
  1194.   DBufPacket * = STRUCT
  1195.     bufY *, bufX *: INTEGER;      (* save the other buffers screen coordinates *)
  1196.     bufPath      *: VSpritePtr;   (* carry the draw path over the gap *)
  1197.  
  1198. (* these pointers must be filled in by the user *)
  1199. (* pointer to other buffer's background save buffer *)
  1200.     bufBuffer    *: e.APTR;
  1201.   END;
  1202.  
  1203.  
  1204. CONST
  1205.  
  1206. (* ************************************************************************ *)
  1207.  
  1208.   b2Norm    * = 0;
  1209.   b2Swap    * = 1;
  1210.   b2Bobber  * = 2;
  1211.  
  1212. (* ************************************************************************ *)
  1213.  
  1214. TYPE
  1215.  
  1216. (* a structure to contain the 16 collision procedure addresses *)
  1217.   CollTable * = STRUCT
  1218.     collPtrs *: ARRAY 16 OF e.APTR;
  1219.   END;
  1220.  
  1221. (* structure used by AddTOFTask *)
  1222.   Isrvstr * = STRUCT (node *: e.Node)
  1223.     iptr  *: IsrvstrPtr;   (* passed to srvr by os *)
  1224.     code  *: e.PROC;
  1225.     ccode *: e.PROC;
  1226.     carg  *: LONGINT;
  1227.   END;
  1228.  
  1229. CONST
  1230.  
  1231. (* Layers *)
  1232.  
  1233.   layerSimple        * =  0;
  1234.   layerSmart         * =  1;
  1235.   layerSuper         * =  2;
  1236.   layerUpdating      * =  4;
  1237.   layerBackdrop      * =  6;
  1238.   layerRefresh       * =  7;
  1239.   layerIRefresh      * =  9;
  1240.   layerIRefresh2     * = 10;
  1241.   layerClipRectsLost * =  8;  (* during BeginUpdate *)
  1242.                               (* or during layerop *)
  1243.                               (* this happens if out of memory *)
  1244.   lmnRegion * = -1;           (* removed in V39 includes *)
  1245.  
  1246. TYPE
  1247.  
  1248.   LayerInfo * = STRUCT
  1249.     layer * : LayerPtr;
  1250.     lp      : LayerPtr;             (* !!PRIVATE!! *)
  1251.     obs   * : ClipRectPtr;
  1252.     freeClipRects   : ClipRectPtr;  (* !!PRIVATE!! *)
  1253.     privateReserve1 : LONGINT;      (* !!PRIVATE!! *)
  1254.     privateReserve2 : LONGINT;      (* !!PRIVATE!! *)
  1255.     lock  : e.SignalSemaphore;      (* !!PRIVATE!! *)
  1256.     head  : e.MinList;              (* !!PRIVATE!! *)
  1257.     privateReserve3 : INTEGER;      (* !!PRIVATE!! *)
  1258.     privateReserve4 : e.APTR;       (* !!PRIVATE!! *)
  1259.     flags * : SET;
  1260.     count   : SHORTINT;             (* !!PRIVATE!! *)
  1261.     lockLayersCount : SHORTINT;     (* !!PRIVATE!! *)
  1262.     privateReserve5 : INTEGER;      (* !!PRIVATE!! *)
  1263.     blankHook : e.APTR;             (* !!PRIVATE!! *)
  1264.     extra     : e.APTR;             (* !!PRIVATE!! *)
  1265.   END;
  1266.  
  1267. CONST
  1268.   newLayerInfoCalled * = 1;
  1269.   alertLayersNoMem   * = 83010000H;  (* removed in V39 includes *)
  1270.  
  1271. (*
  1272.  * LAYERS_NOBACKFILL is the value needed to get no backfill hook
  1273.  * LAYERS_BACKFILL is the value needed to get the default backfill hook
  1274.  *)
  1275.   noBackFill * = SYSTEM.VAL(u.HookPtr,1);
  1276.   backFill   * = SYSTEM.VAL(u.HookPtr,0);
  1277.  
  1278. TYPE
  1279.  
  1280.   AreaInfo * = STRUCT
  1281.     vctrTbl  *: e.APTR;          (* ptr to start of vector table *)
  1282.     vctrPtr  *: e.APTR;          (* ptr to current vertex *)
  1283.     flagTbl  *: e.APTR;          (* ptr to start of vector flag table *)
  1284.     flagPtr  *: e.APTR;          (* ptrs to areafill flags *)
  1285.     count    *: INTEGER;         (* number of vertices in list *)
  1286.     maxCount *: INTEGER;         (* AreaMove/Draw will not allow Count>MaxCount*)
  1287.     firstX *, firstY *: INTEGER; (* first point for this polygon *)
  1288.   END;
  1289.  
  1290.   TmpRas * = STRUCT
  1291.     rasPtr *: e.APTR;
  1292.     size   *: LONGINT;
  1293.   END;
  1294.  
  1295. (* unoptimized for 32bit alignment of pointers *)
  1296.   GelsInfo * = STRUCT
  1297.     sprRsrvd      *: SHORTINT;     (* flag of which sprites to reserve from
  1298.                                       vsprite system *)
  1299.     flags         *: e.BYTE;       (* system use only *)
  1300.     gelHead       *,
  1301.     gelTail       *: VSpritePtr;   (* dummy vSprites for list management*)
  1302.     (* pointer to array of 8 WORDS for sprite available lines *)
  1303.     nextLine      *: e.APTR;
  1304.     (* pointer to array of 8 pointers for color-last-assigned to vSprites *)
  1305.     lastColor     *: e.APTR;
  1306.     collHandler   *: CollTablePtr; (* addresses of collision routines *)
  1307.     leftmost      *,
  1308.     rightmost     *,
  1309.     topmost       *,
  1310.     bottommost    *: INTEGER;
  1311.     firstBlissObj *, lastBlissObj *: e.APTR; (* system use only *)
  1312.   END;
  1313.  
  1314.   RastPort * = STRUCT
  1315.     layer      *: LayerPtr;
  1316.     bitMap     *: BitMapPtr;
  1317.     areaPtrn   *: e.APTR;       (* ptr to areafill pattern *)
  1318.     tmpRas     *: TmpRasPtr;
  1319.     areaInfo   *: AreaInfoPtr;
  1320.     gelsInfo   *: GelsInfoPtr;
  1321.     mask       *: SHORTSET;     (* write mask for this raster *)
  1322.     fgPen      *: SHORTINT;     (* foreground pen for this raster *)
  1323.     bgPen      *: SHORTINT;     (* background pen  *)
  1324.     aOlPen     *: SHORTINT;     (* areafill outline pen *)
  1325.     drawMode   *: SHORTSET;     (* drawing mode for fill, lines, and text *)
  1326.     areaPtSz   *: SHORTINT;     (* 2^n words for areafill pattern *)
  1327.     linPatCnt  *: SHORTINT;     (* current line drawing pattern preshift *)
  1328.     dummy      *: e.BYTE;
  1329.     flags      *: SET;          (* miscellaneous control bits *)
  1330.     linePtrn   *: INTEGER;      (* 16 bits for textured lines *)
  1331.     x * , y    *: INTEGER;      (* current pen position *)
  1332.     minterms   *: ARRAY 8 OF e.BYTE;
  1333.     penWidth   *: INTEGER;
  1334.     penHeight  *: INTEGER;
  1335.     font       *: TextFontPtr;  (* current font address *)
  1336.     algoStyle  *: SHORTSET;     (* the algorithmically generated style *)
  1337.     txFlags    *: SHORTSET;     (* text specific flags *)
  1338.     txHeight   *: INTEGER;      (* text height *)
  1339.     txWidth    *: INTEGER;      (* text nominal width *)
  1340.     txBaseline *: INTEGER;      (* text baseline *)
  1341.     txSpacing  *: INTEGER;      (* text spacing (per character) *)
  1342.     user       *: e.APTR;
  1343.     longreserved *: ARRAY 2 OF LONGINT;
  1344.     wordreserved *: ARRAY 7 OF INTEGER; (* used to be a node *)
  1345.     reserved     *: ARRAY 8 OF e.BYTE;  (* for future use *)
  1346.   END;
  1347.  
  1348. CONST
  1349.  
  1350. (* drawing modes *)
  1351.   jam1        * = SHORTSET{};  (* jam 1 color into raster *)
  1352.   jam2        * = SHORTSET{0}; (* jam 2 colors into raster *)
  1353.   complement  * = 1;           (* XOR bits into raster *)
  1354.   inversvid   * = 2;           (* inverse video for drawing modes *)
  1355.  
  1356. (* these are the flag bits for RastPort flags *)
  1357.   firstDot    * = 0;      (* draw the first dot of this line ? *)
  1358.   oneDot      * = 1;      (* use one dot mode for drawing lines *)
  1359.   dBuffer     * = 2;      (* flag set when RastPorts are double-buffered *)
  1360.  
  1361.              (* only used for bobs *)
  1362.  
  1363.   areaOutline * = 3;      (* used by areafiller *)
  1364.   noCrossFill * = 5;      (* areafills have no crossovers *)
  1365.  
  1366. (* there is only one style of clipping: raster clipping *)
  1367. (* this preserves the continuity of jaggies regardless of clip window *)
  1368. (* When drawing into a RastPort, if the ptr to ClipRect is nil then there *)
  1369. (* is no clipping done, this is dangerous but useful for speed *)
  1370.  
  1371. TYPE
  1372.  
  1373.   RegionRectangle * = STRUCT
  1374.     next *, prev *: RegionRectanglePtr;
  1375.     bounds       *: Rectangle;
  1376.   END;
  1377.  
  1378.   Region * = STRUCT (bounds *: Rectangle)
  1379.     regionRectangle *: RegionRectanglePtr;
  1380.   END;
  1381.  
  1382.  
  1383.   BitScaleArgs * = STRUCT
  1384.     srcX         *, srcY        *: INTEGER; (* source origin *)
  1385.     srcWidth     *, srcHeight   *: INTEGER; (* source size *)
  1386.     xSrcFactor   *, ySrcFactor  *: INTEGER; (* scale factor denominators *)
  1387.     destX        *, destY       *: INTEGER; (* destination origin *)
  1388.     destWidth    *, destHeight  *: INTEGER; (* destination size result *)
  1389.     xDestFactor  *, yDestFactor *: INTEGER; (* scale factor numerators *)
  1390.     srcBitMap    *: BitMapPtr;              (* source BitMap *)
  1391.     destBitMap   *: BitMapPtr;              (* destination BitMap *)
  1392.     flags        *: LONGINT;                (* reserved.  Must be zero! *)
  1393.     xdda *, ydda *: INTEGER;                (* reserved *)
  1394.     reserved1    *: LONGINT;
  1395.     reserved2    *: LONGINT;
  1396.   END;
  1397.  
  1398. CONST
  1399.  
  1400.   spriteAttached * = 80H;
  1401.  
  1402. TYPE
  1403.  
  1404.   SimpleSprite * = STRUCT
  1405.     posctldata *: e.APTR;
  1406.     height     *: INTEGER;
  1407.     x *, y *    : INTEGER;    (* current position *)
  1408.     num        *: INTEGER;
  1409.   END;
  1410.  
  1411.   ExtSprite * = STRUCT (simpleSprite *: SimpleSprite)
  1412.                             (* conventional simple sprite structure *)
  1413.     wordwidth *: INTEGER;   (* graphics use only, subject to change *)
  1414.     flags     *: SET;       (* graphics use only, subject to change *)
  1415.   END;
  1416.  
  1417.  
  1418. CONST
  1419. (* tags for AllocSpriteData() *)
  1420.   spriteaWidth         * =  081000000H;
  1421.   spriteaXreplication  * =  081000002H;
  1422.   spriteaYreplication  * =  081000004H;
  1423.   spriteaOutputheight  * =  081000006H;
  1424.   spriteaAttached      * =  081000008H;
  1425.   spriteaOlddataformat * =  08100000AH; (* MUST pass in outputheight if using this tag *)
  1426.  
  1427. (* tags for GetExtSprite() *)
  1428.   gstagSpriteNum  * = 082000020H;
  1429.   gstagAttached   * = 082000022H;
  1430.   gstagSoftsprite * = 082000024H;
  1431.  
  1432. (* tags valid for either GetExtSprite or ChangeExtSprite *)
  1433.   gstagScandoubled * = 083000000H;  (* request "NTSC-Like" height if possible. *)
  1434.  
  1435. CONST
  1436.  
  1437. (*------ Font Styles ------------------------------------------------*)
  1438.   normal      * = SHORTSET{};  (* normal text (no style bits set) *)
  1439.   normalFont  * = SHORTSET{};  (* prehistoric synonym             *)
  1440.   underlined  * = 0;       (* underlined (under baseline) *)
  1441.   bold        * = 1;       (* bold face text (ORed w/ shifted) *)
  1442.   italic      * = 2;       (* italic (slanted 1:2 right) *)
  1443.   extended    * = 3;       (* extended face (wider than normal) *)
  1444.  
  1445.   colorFont   * = 6;       (* this uses ColorTextFont structure *)
  1446.   tagged      * = 7;       (* the TextAttr is really an TTextAttr, *)
  1447.  
  1448. (*------ Font Flags -------------------------------------------------*)
  1449.   romFont     * = 0;       (* font is in rom *)
  1450.   diskFont    * = 1;       (* font is from diskfont.library *)
  1451.   revPath     * = 2;       (* designed path is reversed (e.g. left) *)
  1452.   tallDot     * = 3;       (* designed for hires non-interlaced *)
  1453.   wideDot     * = 4;       (* designed for lores interlaced *)
  1454.   proportional * = 5;      (* character sizes can vary from nominal *)
  1455.   designed    * = 6;       (* size explicitly designed, not constructed *)
  1456.                            (* note: if you do not set this bit in your *)
  1457.                            (* textattr, then a font may be constructed *)
  1458.                            (* for you by scaling an existing rom or disk *)
  1459.                            (* font (under V36 and above). *)
  1460.     (* bit 7 is always clear for fonts on the graphics font list *)
  1461.   removed     * = 7;       (* the font has been removed *)
  1462.  
  1463. TYPE
  1464.  
  1465. (****** TextAttr node, matches text attributes in RastPort **********)
  1466.   TextAttr * = STRUCT
  1467.     name   *: e.LSTRPTR;     (* name of the font *)
  1468.     ySize  *: INTEGER;       (* height of the font *)
  1469.     style  *: SHORTSET;      (* intrinsic font style *)
  1470.     flags  *: SHORTSET;      (* font preferences and flags *)
  1471.   END;
  1472.  
  1473.   TTextAttr * = STRUCT
  1474.     name   *: e.LSTRPTR;     (* name of the font *)
  1475.     ySize  *: INTEGER;       (* height of the font *)
  1476.     style  *: SHORTSET;      (* intrinsic font style *)
  1477.     flags  *: SHORTSET;      (* font preferences and flags *)
  1478.     tags   *: u.TagListPtr;  (* extended attributes *)
  1479.   END;
  1480.  
  1481. CONST
  1482.  
  1483. (****** Text Tags ***************************************************)
  1484.   deviceDPI   * = 1+u.user;    (* Tag value is Point union: *)
  1485.                                (* Hi word XDPI, Lo word YDPI *)
  1486.  
  1487.   maxFontMatchweight * = 32767;  (* perfect match from WeighTAMatch *)
  1488.  
  1489. TYPE
  1490.  
  1491. (****** TextFonts node **********************************************)
  1492.   TextFont * = STRUCT (message *: e.Message)
  1493.                           (* reply message for font removal *)
  1494.                           (* font name in LN        \    used in this *)
  1495.     ySize     *: INTEGER; (* font height            |    order to best *)
  1496.     style     *: SHORTSET;(* font style             |    match a font *)
  1497.     flags     *: SHORTSET;(* preferences and flags  /    request. *)
  1498.     xSize     *: INTEGER; (* nominal font width *)
  1499.     baseline  *: INTEGER; (* distance from the top of char to baseline *)
  1500.     boldSmear *: INTEGER; (* smear to affect a bold enhancement *)
  1501.  
  1502.     accessors *: INTEGER; (* access count *)
  1503.  
  1504.     loChar    *: CHAR;    (* the first character described here *)
  1505.     hiChar    *: CHAR;    (* the last character described here *)
  1506.     charData  *: e.APTR;  (* the bit character data *)
  1507.  
  1508.     modulo    *: INTEGER; (* the row modulo for the strike font data *)
  1509.     charLoc   *: e.APTR;  (* ptr to location data for the strike font *)
  1510.                           (*   2 words: bit offset then size *)
  1511.     charSpace *: e.APTR;  (* ptr to words of proportional spacing data *)
  1512.     charKern  *: e.APTR;  (* ptr to words of kerning data *)
  1513.   END;
  1514.  
  1515. CONST
  1516.  
  1517. (*----- TextFontExtension.flags0 (partial definition) ----------------------------*)
  1518.   noRemFont * = 0;        (* disallow RemFont for this font *)
  1519.  
  1520. TYPE
  1521.  
  1522.   TextFontExtension * = STRUCT     (* this structure is read-only *)
  1523.     matchWord     -: INTEGER;      (* a magic cookie for the extension *)
  1524.     flags0        -: SHORTSET;     (* (system private flags) *)
  1525.     flags1         : SHORTSET;     (* (system private flags) *)
  1526.     backPtr       -: TextFontPtr;  (* validation of compilation *)
  1527.     origReplyPort -: e.MsgPortPtr; (* original value in tf_Extension *)
  1528.     tags          -: u.TagListPtr; (* Text Tags for the font *)
  1529.     oFontPatchS    : e.APTR;       (* (system private use) *)
  1530.     oFontPatchK    : e.APTR;       (* (system private use) *)
  1531.     (* this space is reserved for future expansion *)
  1532.   END;
  1533.  
  1534. CONST
  1535.  
  1536. (****** ColorTextFont node ******************************************)
  1537. (*----- ColorTextFont.flags ----------------------------------------*)
  1538.   ctColorMask  * = {0..3}; (* mask to get to following color styles *)
  1539.   ctColorFont  * = 0;      (* color map contains designer's colors *)
  1540.   ctGreyFont   * = 1;      (* color map describes even-stepped *)
  1541.                            (* brightnesses from low to high *)
  1542.   ctAntiAlias  * = 2;      (* zero background thru fully saturated char *)
  1543.  
  1544.   ctMapColor   * = 0;      (* map ctf_FgColor to the rp_FgPen if it's *)
  1545.                            (* is a valid color within ctf_Low..ctf_High *)
  1546.  
  1547. TYPE
  1548.  
  1549. (*----- ColorFontColors --------------------------------------------*)
  1550.   ColorFontColors * = STRUCT
  1551.     reserved   *: INTEGER;   (* *must* be zero *)
  1552.     count      *: INTEGER;   (* number of entries in cfc_ColorTable *)
  1553.     colorTable *: e.APTR;    (* 4 bit per component color map packed xRGB *)
  1554.   END;
  1555.  
  1556. (*----- ColorTextFont ----------------------------------------------*)
  1557.   ColorTextFont * = STRUCT (tf *: TextFont)
  1558.     flags        *: SET;      (* extended flags *)
  1559.     depth        *: SHORTINT; (* number of bit planes *)
  1560.     fgColor      *: SHORTINT; (* color that is remapped to FgPen *)
  1561.     low          *: SHORTINT; (* lowest color represented here *)
  1562.     high         *: SHORTINT; (* highest color represented here *)
  1563.     planePick    *: SHORTSET; (* PlanePick ala Images *)
  1564.     planeOnOff   *: SHORTSET; (* PlaneOnOff ala Images *)
  1565.     colorFontColors *: ColorFontColorsPtr; (* colors for font *)
  1566.     charData     *: ARRAY 8 OF e.APTR; (*pointers to bit planes ala tf_CharData *)
  1567.   END;
  1568.  
  1569. (****** TextExtent node *********************************************)
  1570.   Textextent * = STRUCT
  1571.     width   *: INTEGER;    (* same as TextLength *)
  1572.     height  *: INTEGER;    (* same as tf_YSize *)
  1573.     extent  *: Rectangle;  (* relative to CP *)
  1574.   END;
  1575.  
  1576. CONST
  1577.  
  1578.   vtagEndCM              * = 00000000H;
  1579.   vtagChromaKeyClr       * = 80000000H;
  1580.   vtagChromaKeySet       * = 80000001H;
  1581.   vtagBitPlaneKeyClr     * = 80000002H;
  1582.   vtagBitPlaneKeySet     * = 80000003H;
  1583.   vtagBorderBlankClr     * = 80000004H;
  1584.   vtagBorderBlankSet     * = 80000005H;
  1585.   vtagBorderNoTransClr   * = 80000006H;
  1586.   vtagBorderNoTransSet   * = 80000007H;
  1587.   vtagChromaPenClr       * = 80000008H;
  1588.   vtagChromaPenSet       * = 80000009H;
  1589.   vtagChromaPlaneSet     * = 8000000AH;
  1590.   vtagAttachCMSet        * = 8000000BH;
  1591.   vtagNextBufCM          * = 8000000CH;
  1592.   vtagBatchCMClr         * = 8000000DH;
  1593.   vtagBatchCMSet         * = 8000000EH;
  1594.   vtagNormalDispGet      * = 8000000FH;
  1595.   vtagNormalDisplSet     * = 80000010H;
  1596.   vtagCoerceDispGet      * = 80000011H;
  1597.   vtagCoerceDispSet      * = 80000012H;
  1598.   vtagViewPortExtraGet   * = 80000013H;
  1599.   vtagViewPortExtraSet   * = 80000014H;
  1600.   vtagChromaKeyGet       * = 80000015H;
  1601.   vtagBitPlaneKeyGet     * = 80000016H;
  1602.   vtagBorderBlankGet     * = 80000017H;
  1603.   vtagBorderNoTransGet   * = 80000018H;
  1604.   vtagChromaPenGet       * = 80000019H;
  1605.   vtagChromaPlaneGet     * = 8000001AH;
  1606.   vtagAttachCMGet        * = 8000001BH;
  1607.   vtagBatchCMGet         * = 8000001CH;
  1608.   vtagBatchItemsGet      * = 8000001DH;
  1609.   vtagBatchItemsSet      * = 8000001EH;
  1610.   vtagBatchItemsAdd      * = 8000001FH;
  1611.   vtagVPModeIDGet        * = 80000020H;
  1612.   vtagVPMoedIDSet        * = 80000021H;
  1613.   vtagVPModeIDClr        * = 80000022H;
  1614.   vtagUserClipGet        * = 80000023H;
  1615.   vtagUserClipSet        * = 80000024H;
  1616.   vtagUserClipClr        * = 80000025H;
  1617. (* the following tags are V39 specific. They will be ignored (returing error -3) by
  1618.       earlier versions *)
  1619.   vtagPf1BaseGet         * = 080000026H;
  1620.   vtagPf2BaseGet         * = 080000027H;
  1621.   vtagSpEvenBaseGet      * = 080000028H;
  1622.   vtagSpOddBaseGet       * = 080000029H;
  1623.   vtagPf1BaseSet         * = 08000002AH;
  1624.   vtagPf2BaseSet         * = 08000002BH;
  1625.   vtagSpEvenBaseSet      * = 08000002CH;
  1626.   vtagSpOddBaseSet       * = 08000002DH;
  1627.   vtagBorderSpriteGet    * = 08000002EH;
  1628.   vtagBorderSpriteSet    * = 08000002FH;
  1629.   vtagBorderSpriteClr    * = 080000030H;
  1630.   vtagSpriteResnSet      * = 080000031H;
  1631.   vtagSpriteResnGet      * = 080000032H;
  1632.   vtagPf1ToSpritePriSet  * = 080000033H;
  1633.   vtagPf1ToSpritePriGet  * = 080000034H;
  1634.   vtagPf2ToSpritePriSet  * = 080000035H;
  1635.   vtagPf2ToSpritePriGet  * = 080000036H;
  1636.   vtagImmediate          * = 080000037H;
  1637.   vtagFullPaletteSet     * = 080000038H;
  1638.   vtagFullPaletteGet     * = 080000039H;
  1639.   vtagFullPaletteClr     * = 08000003AH;
  1640.   vtagDefSpriteResnSet   * = 08000003BH;
  1641.   vtagDefSpriteResnGet   * = 08000003CH;
  1642.  
  1643. (* all the following tags follow the new, rational standard for videocontrol tags:
  1644.  * VC_xxx,state         set the state of attribute 'xxx' to value 'state'
  1645.  * VC_xxx_QUERY,&var    get the state of attribute 'xxx' and store it into the longword
  1646.  *                      pointed to by &var.
  1647.  *
  1648.  * The following are new for V40:
  1649.  *)
  1650.  
  1651.   vcIntermediateCLUpdate        * = 080000080H;
  1652.         (* default=true. When set graphics will update the intermediate copper
  1653.          * lists on color changes, etc. When false, it won't, and will be faster.
  1654.          *)
  1655.   vcIntermediateCLUpdateQuery   * = 080000081H;
  1656.  
  1657.   vcNoColorPaletteLoad          * = 080000082H;
  1658.         (* default = false. When set, graphics will only load color 0
  1659.          * for this ViewPort, and so the ViewPort's colors will come
  1660.          * from the previous ViewPort's.
  1661.          *
  1662.          * NB - Using this tag and VTAG_FULLPALETTE_SET together is undefined.
  1663.          *)
  1664.   vcNoColorPaletteLoadQuery     * = 080000083H;
  1665.  
  1666.   vcDualPFDisable               * = 080000084H;
  1667.         (* default = false. When this flag is set, the dual-pf bit
  1668.            in Dual-Playfield screens will be turned off. Even bitplanes
  1669.            will still come from the first BitMap and odd bitplanes
  1670.            from the second BitMap, and both R[xy]Offsets will be
  1671.            considered. This can be used (with appropriate palette
  1672.            selection) for cross-fades between differently scrolling
  1673.            images.
  1674.            When this flag is turned on, colors will be loaded for
  1675.            the viewport as if it were a single viewport of depth
  1676.            depth1+depth2 *)
  1677.   vcDualPFDisableQuery          * = 080000085H;
  1678.  
  1679.  
  1680. TYPE
  1681.  
  1682.   ViewPort * = STRUCT
  1683.     next     *: ViewPortPtr;
  1684.     colorMap *: ColorMapPtr;     (* table of colors for this viewport *)
  1685.                  (* if this is nil, MakeVPort assumes default values *)
  1686.     dspIns   *: CopListDummyPtr; (* user by MakeVPort() *)
  1687.     sprIns   *: CopListDummyPtr; (* used by sprite stuff *)
  1688.     clrIns   *: CopListDummyPtr; (* used by sprite stuff *)
  1689.     uCopIns  *: UCopListPtr;     (* User copper list *)
  1690.     dWidth   *, dHeight  *: INTEGER;
  1691.     dxOffset *, dyOffset *: INTEGER;
  1692.     modes    *: SET;
  1693.     spritePriorities *: SHORTINT;
  1694.     extendedModes *: SHORTINT;
  1695.     rasInfo       *: RasInfoPtr;
  1696.   END;
  1697.  
  1698.  
  1699.   View * = STRUCT
  1700.     viewPort   *: ViewPortPtr;
  1701.     lofCprList *: CprlistPtr;  (* used for interlaced and noninterlaced *)
  1702.     shfCprList *: CprlistPtr;  (* only used during interlace *)
  1703.     dyOffset   *, dxOffset *: INTEGER;   (* for complete View positioning *)
  1704.                                (* offsets are +- adjustments to standard #s *)
  1705.     modes      *: SET;         (* such as INTERLACE, GENLOC *)
  1706.   END;
  1707.  
  1708. (* these structures are obtained via GfxNew *)
  1709. (* and disposed by GfxFree *)
  1710.   ViewExtra * = STRUCT (n *: ExtendedNode)
  1711.     view    *: ViewPtr;        (* backwards link *)
  1712.     monitor *: MonitorSpecPtr; (* monitors for this view *)
  1713.     topLine *: INTEGER;
  1714.   END;
  1715.  
  1716. (* this structure is obtained via GfxNew *)
  1717. (* and disposed by GfxFree *)
  1718.   ViewPortExtra * = STRUCT (n *: ExtendedNode)
  1719.     viewPort    *: ViewPortPtr;   (* backwards link *)
  1720.     displayClip *: Rectangle;  (* hmakeVPort display clipping information *)
  1721.     (* These are added for V39 *)
  1722.     vecTable     : e.APTR;       (* Private *)
  1723.     driverData  *: ARRAY 2 OF e.APTR;
  1724.     flags       *: SET;
  1725.     origin      *: ARRAY 2 OF Point; (* First visible point relative to the DClip.
  1726.                                       * One for each possible playfield.
  1727.                                       *)
  1728.     cop1ptr      : LONGINT;        (* private *)
  1729.     cop2ptr      : LONGINT;        (* private *)
  1730.   END;
  1731.  
  1732. CONST
  1733. (* defines used for Modes in IVPargs *)
  1734.  
  1735.   genLockVideo    * = 1;
  1736.   lace            * = 2;
  1737.   doubleScan      * = 3;
  1738.   superHires      * = 5;
  1739.   pfba            * = 6;
  1740.   extraHalfbrite  * = 7;
  1741.   genlockAudio    * = 8;
  1742.   dualpf          * = 10;
  1743.   ham             * = 11;
  1744.   extendedMode    * = 12;
  1745.   vpHide          * = 13;
  1746.   sprites         * = 14;
  1747.   hires           * = 15;
  1748.  
  1749. (* ViewPort *)
  1750. (* All these VPXF_ flags are private *)
  1751.   vpxbFreeMe        = 0;       (* private *)
  1752.   vpxbLast          = 1;
  1753.   vpxbStraddles256  = 4;
  1754.   vpxbStraddles512  = 5;
  1755.  
  1756.   extendVStruct * = 12;   (* unused bit in Modes field of View *)
  1757.  
  1758.   a2024     * = 6;   (* VP?_ fields internal only *)
  1759.   tenHz     * = 4;   (* may be wrong [hG] *)
  1760.  
  1761. (* old definition from 2.04 includes [hG]
  1762.   a2024     * = 6;
  1763.   agnus     * = 5;
  1764.   tenHz     * = 5;
  1765. *)
  1766. TYPE
  1767.  
  1768.   RasInfo * = STRUCT (* used by callers to and InitDspC() *)
  1769.     next     *: RasInfoPtr;          (* used for dualpf *)
  1770.     bitMap   *: BitMapPtr;
  1771.     rxOffset *, ryOffset *: INTEGER; (* scroll offsets in this BitMap *)
  1772.   END;
  1773.  
  1774.   ColorMap * = STRUCT
  1775.     flags        *: SHORTSET;
  1776.     type         *: SHORTINT;
  1777.     count        *: INTEGER;
  1778.     colorTable   *: e.APTR;
  1779.     vpe          *: ViewPortExtraPtr;
  1780.     lowColorBits *: e.APTR;         (* was: transparencyBits *)
  1781.     transparencyPlane *: SHORTINT;
  1782.     spriteResolution  *: e.UBYTE;
  1783.     spriteResDefault  *: e.UBYTE;   (* what resolution you get when
  1784.                                      * you have set SPRITERESN_DEFAULT *)
  1785.     auxFlags     *: SHORTSET;
  1786.     vp           *: ViewPortPtr;
  1787.     normalDisplayInfo *: DisplayInfoPtr;
  1788.     coerceDisplayInfo *: DisplayInfoPtr;
  1789.     cmBatchItems *: u.TagListPtr;
  1790.     vpModeID     *: LONGINT;
  1791.     palExtra     *: PaletteExtraPtr;
  1792.     spriteBaseEven *: INTEGER;
  1793.     spriteBaseOdd  *: INTEGER;
  1794.     bp0base      *: INTEGER;
  1795.     bp1base      *: INTEGER;
  1796.   END;
  1797.  
  1798. CONST
  1799.  
  1800. (* if Type == 0 then ColorMap is V1.2/V1.3 compatible *)
  1801. (* if Type != 0 then ColorMap is V38     compatible *)
  1802. (* the system will never create other than V39 type colormaps when running V39 *)
  1803.  
  1804.   colorMapTypeV12     * = 0;
  1805.   colorMapTypeV14     * = 1;
  1806.   colorMapTypeV36     * = colorMapTypeV14;      (* use this definition *)
  1807.   colormapTypeV39     * = 2;
  1808.  
  1809. (* Flags variable *)
  1810.   colorMapTransparency    * = 0;
  1811.   colorPlaneTransparency  * = 1;
  1812.   borderBlanking          * = 2;
  1813.   boderNoTransparency     * = 3;
  1814.   videoControlBatch       * = 4;
  1815.   userCopperClip          * = 5;
  1816.   borderSprites           * = 6;
  1817.  
  1818.   resnEcs     * =  0;
  1819. (* ^140ns, except in 35ns viewport, where it is 70ns. *)
  1820.   resn140ns   * =  1;
  1821.   resn70ns    * =  2;
  1822.   resn35ns    * =  3;
  1823.   resnDefault * = -1;
  1824.  
  1825. (* AuxFlags : *)
  1826.   fullPalette      * = 0;
  1827.   noIntermedUpdate * = 1;
  1828.   noColorLoad      * = 2;
  1829.   dualPFDisable    * = 3;
  1830.  
  1831. TYPE
  1832.   PaletteExtra * = STRUCT             (* structure may be extended so watch out! *)
  1833.     semaphore    *: e.SignalSemaphore;(* shared semaphore for arbitration     *)
  1834.     firstFree     : INTEGER;          (* *private*                            *)
  1835.     nFree        *: INTEGER;          (* number of free colors                *)
  1836.     firstShared   : INTEGER;          (* *private*                            *)
  1837.     nShared       : INTEGER;          (* *private*                            *)
  1838.     refCnt        : e.APTR;           (* *private*                            *)
  1839.     allocList     : e.APTR;           (* *private*                            *)
  1840.     viewPort     *: ViewPortPtr;      (* back pointer to viewport             *)
  1841.     sharableColors *: INTEGER;        (* the number of sharable colors.       *)
  1842.   END;
  1843.  
  1844. CONST
  1845. (* flags values for ObtainPen *)
  1846.   penbExclusive  * = 0;
  1847.   penbNoSetcolor * = 1;
  1848.  
  1849. (* precision values for ObtainBestPen : *)
  1850.   precisionExact * = -1;
  1851.   precisionImage * =  0;
  1852.   precisionIcon  * = 16;
  1853.   precisionGui   * = 32;
  1854.  
  1855.  
  1856. (* tags for ObtainBestPen: *)
  1857.   obpPrecision * = 084000000H;
  1858.   obpFailIfBad * = 084000001H;
  1859.  
  1860. (* From V39, MakeVPort() will return an error if there is not enough memory,
  1861.  * or the requested mode cannot be opened with the requested depth with the
  1862.  * given bitmap (for higher bandwidth alignments).
  1863.  *)
  1864.  
  1865.   mvpOk        * = 0;   (* you want to see this one *)
  1866.   mvpNoMem     * = 1;   (* insufficient memory for intermediate workspace *)
  1867.   mvpNoVPE     * = 2;   (* ViewPort does not have a ViewPortExtra, and
  1868.                          * insufficient memory to allocate a temporary one.
  1869.                          *)
  1870.   mvpNoDspIns  * = 3;   (* insufficient memory for intermidiate copper
  1871.                          * instructions.
  1872.                          *)
  1873.   mvpNoDisplay * = 4;   (* BitMap data is misaligned for this viewport's
  1874.                          * mode and depth - see AllocBitMap().
  1875.                          *)
  1876.   mvpOffBottom   = 5;   (* PRIVATE - you will never see this. *)
  1877.  
  1878. (* From V39, MrgCop() will return an error if there is not enough memory,
  1879.  * or for some reason MrgCop() did not need to make any copper lists.
  1880.  *)
  1881.  
  1882.   mcopOk    * = 0;  (* you want to see this one *)
  1883.   mcopNoMem * = 1;  (* insufficient memory to allocate the system
  1884.                      * copper lists.
  1885.                      *)
  1886.   mcopNop   * = 2;  (* MrgCop() did not merge any copper lists
  1887.                      * (eg, no ViewPorts in the list, or all marked as
  1888.                      * hidden).
  1889.                      *)
  1890.  
  1891. TYPE
  1892.   DBufInfo * = STRUCT
  1893.     link1       *: e.APTR;
  1894.     count1      *: LONGINT;
  1895.     safeMessage *: e.Message; (* replied to when safe to write to old bitmap *)
  1896.     userData1   *: e.APTR;    (* first user data *)
  1897.  
  1898.     link2       *: e.APTR;
  1899.     count2      *: LONGINT;
  1900.     dispMessage *: e.Message; (* replied to when new bitmap has been displayed at least
  1901.                                  once *)
  1902.     userData2   *: e.APTR;    (* second user data *)
  1903.     matchLong   *: LONGINT;
  1904.     copPtr1     *: e.APTR;
  1905.     copPtr2     *: e.APTR;
  1906.     copPtr3     *: e.APTR;
  1907.     beamPos1    *: INTEGER;
  1908.     beamPos2    *: INTEGER;
  1909.   END;
  1910.  
  1911.  
  1912. TYPE
  1913.   GfxBase * = STRUCT (libNode *: e.Library)
  1914.     actiView *: ViewPtr;
  1915.     copinit  *: CopinitPtr;    (* ptr to copper start up list *)
  1916.     cia      *: e.APTR;        (* for 8520 resource use *)
  1917.     blitter  *: e.APTR;        (* for future blitter resource use *)
  1918.     loFlist  *: e.APTR;
  1919.     shFlist  *: e.APTR;
  1920.     blthd    *, blttl  *: h.BltnodePtr;
  1921.     bsblthd  *,bsblttl *: h.BltnodePtr;
  1922.     vbsrv    *, timsrv *, bltsrv *: e.Interrupt;
  1923.     textFonts   *: e.List;
  1924.     defaultFont *: TextFontPtr;
  1925.     modes       *: SET;        (* copy of current first bplcon0 *)
  1926.     vBlank    *: e.BYTE;
  1927.     debug     *: e.BYTE;
  1928.     beamSync  *: INTEGER;
  1929.     bplcon0   *: SET;          (* it is ored into each bplcon0 for display *)
  1930.     spriteReserved *: e.BYTE;
  1931.     bytereserved *: e.BYTE;
  1932.     flags     *: SET;
  1933.     blitLock  *: INTEGER;
  1934.     blitNest  *: INTEGER;
  1935.  
  1936.     blitWaitQ *: e.List;
  1937.     blitOwner *: e.TaskPtr;
  1938.     waitQ     *: e.List;
  1939.     displayFlags *: SET;    (* NTSC PAL GENLOC etc*)
  1940.                             (* flags initialized at power on *)
  1941.     simpleSprites *: e.APTR;
  1942.     maxDisplayRow *: INTEGER;          (* hardware stuff, do not use *)
  1943.     maxDisplayColumn  *: INTEGER;      (* hardware stuff, do not use *)
  1944.     normalDisplayRows *: INTEGER;
  1945.     normalDisplayColumns *: INTEGER;
  1946.     (* the following are for standard non interlace, 1/2 wb width *)
  1947.     normalDPMX   *: INTEGER;             (* Dots per meter on display *)
  1948.     normalDPMY   *: INTEGER;             (* Dots per meter on display *)
  1949.     lastChanceMemory *: e.SignalSemaphorePtr;
  1950.     lcMptr        *: e.APTR;
  1951.     microsPerLine *: INTEGER;          (* 256 time usec/line *)
  1952.     minDisplayColumn *: INTEGER;
  1953.     chipRevBits0 *: SHORTSET;
  1954.     memType      *:  e.BYTE;
  1955.     reserved     *: ARRAY 4 OF e.BYTE;
  1956.     monitorID    *: INTEGER;
  1957.     hedley         *: ARRAY 8 OF LONGINT;
  1958.     hedleySprites  *: ARRAY 8 OF LONGINT;  (* sprite ptrs for intuition mouse *)
  1959.     hedleySprites1 *: ARRAY 8 OF LONGINT;  (* sprite ptrs for intuition mouse *)
  1960.     hedleyCount  *: INTEGER;
  1961.     hedleyFlags  *: SET;
  1962.     hedleyTmp    *: INTEGER;
  1963.     hashTable    *: e.APTR;
  1964.     currentTotRows  *: INTEGER;
  1965.     currentTotCclks *: INTEGER;
  1966.     hedleyHint   *: e.BYTE;
  1967.     hedleyHint2  *: e.BYTE;
  1968.     nreserved    *: ARRAY 4 OF LONGINT;
  1969.     a2024SyncRaster  *: e.APTR;
  1970.     controlDeltaPAL  *: INTEGER;
  1971.     controlDeltaNTSC *: INTEGER;
  1972.     currentMonitor *: MonitorSpecPtr;
  1973.     monitorList    *: e.List;
  1974.     defaultMonitor *: MonitorSpecPtr;
  1975.     monitorListSemaphore *: e.SignalSemaphorePtr;
  1976.     displayInfoDataBase  *: e.APTR;
  1977.     topLine      *: INTEGER;
  1978.     actiViewCprSemaphore *: e.SignalSemaphorePtr;
  1979.     utilBase     *: e.LibraryPtr;           (* for hook and tag utilities   *)
  1980.     execBase     *: e.LibraryPtr;           (* to link with rom.lib *)
  1981.     bwshifts     *: e.APTR;   (* to UBYTE; *)
  1982.     strtFetchMasks *: e.APTR; (* to UWORD *)
  1983.     stopFetchMasks *: e.APTR; (* to UWORD *)
  1984.     overrun      *: e.APTR;   (* to UWORD *)
  1985.     realStops    *: e.APTR;   (* to WORD  *)
  1986.     spriteWidth  *: INTEGER;  (* current width (in words) of sprites *)
  1987.     spriteFMode  *: INTEGER;  (* current sprite fmode bits    *)
  1988.     softSprites  *: e.BYTE;   (* bit mask of size change knowledgeable sprites *)
  1989.     arraywidth   *: e.BYTE;
  1990.     defaultSpriteWidth *: INTEGER;  (* what width intuition wants *)
  1991.     sprMoveDisable *: e.BYTE;
  1992.     wantChips    *: e.UBYTE;
  1993.     boardMemType *: e.UBYTE;
  1994.     bugs         *: e.UBYTE;
  1995.     layersBase   *: e.APTR;   (* to LONGINT *)
  1996.     colorMask    *: LONGINT;
  1997.     iVector      *: e.APTR;
  1998.     iData        *: e.APTR;
  1999.     specialCounter *: LONGINT; (* special for double buffering *)
  2000.     dbList       *: e.APTR;
  2001.     monitorFlags *: INTEGER;
  2002.     scanDoubledSprites *: e.UBYTE;
  2003.     bp3Bits        *: e.UBYTE;
  2004.     monitorVBlank  *: AnalogSignalInterval;
  2005.     naturalMonitor *: MonitorSpecPtr;
  2006.     progData     *: e.APTR;
  2007.     extSprites   *: e.UBYTE;
  2008.     pad3         *: SHORTINT;
  2009.     gfxFlags     *: SET;
  2010.     vbCounter    *: LONGINT;
  2011.     hashTableSemaphore *: e.SignalSemaphorePtr;
  2012.     hwEmul       *: UNTRACED POINTER TO ARRAY 9 OF LONGINT;
  2013.   END;
  2014.  
  2015.   (* chunkyToPlanarPtr = hwEmul[0]    Macro!!*)
  2016.  
  2017. CONST
  2018. (* Values for GfxBase->DisplayFlags *)
  2019.   ntsc           * = 0;
  2020.   genloc         * = 1;
  2021.   pal            * = 2;
  2022.   todaSafe       * = 3;
  2023.   reallyPal      * = 16;        (* what is actual crystal frequency
  2024.                                  (as opposed to what bootmenu set the agnus to)?
  2025.                                  (V39) *)
  2026.   lpenSwapFrames * = 32;        (* LightPen software could set this bit if the
  2027.                                  * "lpen-with-interlace" fix put in for V39
  2028.                                  * does not work. This is true of a number of
  2029.                                  * Agnus chips.
  2030.                                  * (V40).
  2031.                                  *)
  2032.  
  2033.   blitMsgFault * = 4;
  2034.  
  2035. (* bits defs for ChipRevBits *)
  2036.   bigBlits  * = 0;
  2037.   hrAgnus   * = 0;
  2038.   hrDenise  * = 1;
  2039.   aaAlice   * = 2;
  2040.   aaLisa    * = 3;
  2041.   aaMLisa   * = 4;       (* internal use only. *)
  2042.  
  2043. (* Pass ONE of these to SetChipRev() *)
  2044.   chipRevA    * = LONGSET{hrAgnus};
  2045.   chipRevECS  * = LONGSET{hrAgnus, hrDenise};
  2046.   chipRevAA   * = LONGSET{aaAlice, aaLisa} + chipRevECS;
  2047.   chipRevBest * = LONGSET{0..31};
  2048.  
  2049. (* memory type *)
  2050.   bus16  * = 0;
  2051.   nmlCAS * = 0;
  2052.   bus32  * = 1;
  2053.   dblCAS * = 2;
  2054.   bandwidth1x    * =  LONGSET{bus16, nmlCAS};
  2055.   bandwidth2xNml * =  LONGSET{bus32};
  2056.   bandwidth2xDbl * =  LONGSET{dblCAS};
  2057.   bandwidth4x    * =  LONGSET{bus32, dblCAS};
  2058.  
  2059. (* GfxFlags (private) *)
  2060.   newDatabase    = 1;
  2061.  
  2062.   graphicsName * = "graphics.library";
  2063.  
  2064. (*------- coerce -------------*)
  2065.  
  2066. (* These flags are passed (in combination) to CoerceMode() to determine the
  2067.  * type of coercion required.
  2068.  *)
  2069.  
  2070. (* Ensure that the mode coerced to can display just as many colors as the
  2071.  * ViewPort being coerced.
  2072.  *)
  2073.   preserveColors * = 0;
  2074.  
  2075. (* Ensure that the mode coerced to is not interlaced. *)
  2076.   avoidFlicker   * = 1;
  2077.  
  2078. (* Coercion should ignore monitor compatibility issues. *)
  2079.   ignoreMCompat  * = 2;
  2080.  
  2081.  
  2082.   bidTagCoerce     = 1;  (* Private *)
  2083.  
  2084. (*------- rpattr -------------*)
  2085.  
  2086.   rpFont       * = 080000000H;   (* get/set font *)
  2087.   rpAPen       * = 080000002H;   (* get/set apen *)
  2088.   rpBPen       * = 080000003H;   (* get/set bpen *)
  2089.   rpDrMd       * = 080000004H;   (* get/set draw mode *)
  2090.   rpOutlinePen * = 080000005H;   (* get/set outline pen *)
  2091.   rpWriteMask  * = 080000006H;   (* get/set WriteMask *)
  2092.   rpMaxPen     * = 080000007H;   (* get/set maxpen *)
  2093.  
  2094.   rpDrawBounds * = 080000008H;   (* get only rastport draw bounds. pass &rect *)
  2095.  
  2096.  
  2097. VAR
  2098.   gfx *, base *: GfxBasePtr;  (* synonyms *)
  2099.  
  2100.  
  2101. (*------ BitMap primitives ------*)
  2102. PROCEDURE BltBitMap      *{gfx,- 30}(srcBitMap{8}    : BitMapPtr;
  2103.                                      xSrc{0}         : INTEGER;
  2104.                                      ySrc{1}         : INTEGER;
  2105.                                      destBitMap{9}   : BitMapPtr;
  2106.                                      xDest{2}        : INTEGER;
  2107.                                      yDest{3}        : INTEGER;
  2108.                                      xSize{4}        : INTEGER;
  2109.                                      ySize{5}        : INTEGER;
  2110.                                      minterm{6}      : e.BYTE;
  2111.                                      mask{7}         : SHORTSET;
  2112.                                      tempA{10}       : PLANEPTR): LONGINT;
  2113. PROCEDURE BltTemplate    *{gfx,- 36}(source{8}       : PLANEPTR;
  2114.                                      xSrc{0}         : INTEGER;
  2115.                                      srcMod{1}       : INTEGER;
  2116.                                      destRP{9}       : RastPortPtr;
  2117.                                      xDest{2}        : INTEGER;
  2118.                                      yDest{3}        : INTEGER;
  2119.                                      xSize{4}        : INTEGER;
  2120.                                      ySize{5}        : INTEGER);
  2121. (*------ Text routines ------*)
  2122. PROCEDURE ClearEOL       *{gfx,- 42}(rp{9}           : RastPortPtr);
  2123. PROCEDURE ClearScreen    *{gfx,- 48}(rp{9}           : RastPortPtr);
  2124. PROCEDURE TextLength     *{gfx,- 54}(rp{9}           : RastPortPtr;
  2125.                                      string{8}       : ARRAY OF CHAR;
  2126.                                      count{0}        : LONGINT): INTEGER;
  2127. PROCEDURE Text           *{gfx,- 60}(rp{9}           : RastPortPtr;
  2128.                                      string{8}       : ARRAY OF CHAR;
  2129.                                      count{0}        : LONGINT);
  2130. PROCEDURE SetFont        *{gfx,- 66}(rp{9}           : RastPortPtr;
  2131.                                      textFont{8}     : TextFontPtr);
  2132. PROCEDURE OpenFont       *{gfx,- 72}(textAttr{8}     : TextAttr): TextFontPtr;
  2133. PROCEDURE CloseFont      *{gfx,- 78}(textFont{9}     : TextFontPtr);
  2134. PROCEDURE AskSoftStyle   *{gfx,- 84}(rp{9}           : RastPortPtr): SHORTSET;
  2135. PROCEDURE SetSoftStyle   *{gfx,- 90}(rp{9}           : RastPortPtr;
  2136.                                      style{0}        : SHORTSET;
  2137.                                      enable{1}       : SHORTSET): SHORTSET;
  2138. (*------        Gels routines ------*)
  2139. PROCEDURE AddBob         *{gfx,- 96}(bob{8}          : BobPtr;
  2140.                                      rp{9}           : RastPortPtr);
  2141. PROCEDURE AddVSprite     *{gfx,-102}(vSprite{8}      : VSpritePtr;
  2142.                                      rp{9}           : RastPortPtr);
  2143. PROCEDURE DoCollision    *{gfx,-108}(rp{9}           : RastPortPtr);
  2144. PROCEDURE DrawGList      *{gfx,-114}(rp{9}           : RastPortPtr;
  2145.                                      vp{8}           : ViewPortPtr);
  2146. PROCEDURE InitGels       *{gfx,-120}(head{8}         : VSpritePtr;
  2147.                                      tail{9}         : VSpritePtr;
  2148.                                      gelsInfo{10}    : GelsInfoPtr);
  2149. PROCEDURE InitMasks      *{gfx,-126}(vSprite{8}      : VSpritePtr);
  2150. PROCEDURE RemIBob        *{gfx,-132}(bob{8}          : BobPtr;
  2151.                                      rp{9}           : RastPortPtr;
  2152.                                      vp{10}          : ViewPortPtr);
  2153. PROCEDURE RemVSprite     *{gfx,-138}(vSprite{8}      : VSpritePtr);
  2154. PROCEDURE SetCollision   *{gfx,-144}(num{0}          : LONGINT;
  2155.                                      routine{8}      : e.PROC;
  2156.                                      gelsInfo{9}     : GelsInfoPtr);
  2157. PROCEDURE SortGList      *{gfx,-150}(rp{9}           : RastPortPtr);
  2158. PROCEDURE AddAnimOb      *{gfx,-156}(anOb{8}         : AnimObPtr;
  2159.                                      VAR anKey{9}    : AnimObPtr;
  2160.                                      rp{10}          : RastPortPtr);
  2161. PROCEDURE Animate        *{gfx,-162}(VAR anKey{8}    : AnimObPtr;
  2162.                                      rp{9}           : RastPortPtr);
  2163. PROCEDURE GetGBuffers    *{gfx,-168}(anOb{8}         : AnimObPtr;
  2164.                                      rp{9}           : RastPortPtr;
  2165.                                      flag{0}         : BOOLEAN): BOOLEAN;
  2166. PROCEDURE InitGMasks     *{gfx,-174}(animOb{8}       : AnimObPtr);
  2167. (*------        General graphics routines ------*)
  2168. PROCEDURE DrawEllipse    *{gfx,-180}(rp{9}           : RastPortPtr;
  2169.                                      xCenter{0}      : INTEGER;
  2170.                                      yCenter{1}      : INTEGER;
  2171.                                      a{2}            : INTEGER;
  2172.                                      b{3}            : INTEGER);
  2173. PROCEDURE AreaEllipse    *{gfx,-186}(rp{9}           : RastPortPtr;
  2174.                                      xCenter{0}      : INTEGER;
  2175.                                      yCenter{1}      : INTEGER;
  2176.                                      a{2}            : INTEGER;
  2177.                                      b{3}            : INTEGER): BOOLEAN;
  2178. PROCEDURE LoadRGB4       *{gfx,-192}(vp{8}           : ViewPortPtr;
  2179.                                      colors{9}       : ARRAY OF INTEGER;
  2180.                                      count{0}        : LONGINT);
  2181. PROCEDURE InitRastPort   *{gfx,-198}(VAR rp{9}       : RastPort);
  2182. PROCEDURE InitVPort      *{gfx,-204}(VAR vp{8}       : ViewPort);
  2183. PROCEDURE OldMrgCop      *{gfx,-210}(view{9}         : ViewPtr);
  2184. PROCEDURE MrgCop         *{gfx,-210}(view{9}         : ViewPtr): LONGINT;
  2185. PROCEDURE MakeVPort      *{gfx,-216}(view{8}         : ViewPtr;
  2186.                                      vp{9}           : ViewPortPtr): LONGINT;
  2187. PROCEDURE LoadView       *{gfx,-222}(view{9}         : ViewPtr);
  2188. PROCEDURE WaitBlit       *{gfx,-228}();
  2189. PROCEDURE SetRast        *{gfx,-234}(rp{9}           : RastPortPtr;
  2190.                                      pen{0}          : INTEGER);
  2191. PROCEDURE Move           *{gfx,-240}(rp{9}           : RastPortPtr;
  2192.                                      x{0}            : INTEGER;
  2193.                                      y{1}            : INTEGER);
  2194. PROCEDURE Draw           *{gfx,-246}(rp{9}           : RastPortPtr;
  2195.                                      x{0}            : INTEGER;
  2196.                                      y{1}            : INTEGER);
  2197. PROCEDURE AreaMove       *{gfx,-252}(rp{9}           : RastPortPtr;
  2198.                                      x{0}            : INTEGER;
  2199.                                      y{1}            : INTEGER): BOOLEAN;
  2200. PROCEDURE AreaDraw       *{gfx,-258}(rp{9}           : RastPortPtr;
  2201.                                      x{0}            : INTEGER;
  2202.                                      y{1}            : INTEGER): BOOLEAN;
  2203. PROCEDURE AreaEnd        *{gfx,-264}(rp{9}           : RastPortPtr): BOOLEAN;
  2204. PROCEDURE WaitTOF        *{gfx,-270}();
  2205. PROCEDURE QBlit          *{gfx,-276}(blit{9}         : h.BltnodePtr);
  2206. PROCEDURE InitArea       *{gfx,-282}(VAR areaInfo{8} : AreaInfo;
  2207.                                      vectorBuffer{9} : e.APTR;
  2208.                                      maxVectors{0}   : LONGINT);
  2209. PROCEDURE SetRGB4        *{gfx,-288}(vp{8}           : ViewPortPtr;
  2210.                                      index{0}        : INTEGER;
  2211.                                      red{1}          : INTEGER;
  2212.                                      green{2}        : INTEGER;
  2213.                                      blue{3}         : INTEGER);
  2214. PROCEDURE QBSBlit        *{gfx,-294}(blit{9}         : h.BltnodePtr);
  2215. PROCEDURE BltClear       *{gfx,-300}(memBlock{9}     : PLANEPTR;
  2216.                                      byteCount{0}    : LONGINT;
  2217.                                      flags{1}        : LONGSET);
  2218. PROCEDURE RectFill       *{gfx,-306}(rp{9}           : RastPortPtr;
  2219.                                      xMin{0}         : INTEGER;
  2220.                                      yMin{1}         : INTEGER;
  2221.                                      xMax{2}         : INTEGER;
  2222.                                      yMax{3}         : INTEGER);
  2223. PROCEDURE BltPattern     *{gfx,-312}(rp{9}           : RastPortPtr;
  2224.                                      mask{8}         : PLANEPTR;
  2225.                                      xMin{0}         : INTEGER;
  2226.                                      yMin{1}         : INTEGER;
  2227.                                      xMax{2}         : INTEGER;
  2228.                                      yMax{3}         : INTEGER;
  2229.                                      bytecnt{4}      : INTEGER);
  2230. PROCEDURE ReadPixel      *{gfx,-318}(rp{9}           : RastPortPtr;
  2231.                                      x{0}            : INTEGER;
  2232.                                      y{1}            : INTEGER): LONGINT;
  2233. PROCEDURE WritePixel     *{gfx,-324}(rp{9}           : RastPortPtr;
  2234.                                      x{0}            : INTEGER;
  2235.                                      y{1}            : INTEGER): BOOLEAN;
  2236. PROCEDURE Flood          *{gfx,-330}(rp{9}           : RastPortPtr;
  2237.                                      mode{2}         : LONGINT;
  2238.                                      x{0}            : INTEGER;
  2239.                                      y{1}            : INTEGER): BOOLEAN;
  2240. PROCEDURE PolyDraw       *{gfx,-336}(rp{9}           : RastPortPtr;
  2241.                                      count{0}        : INTEGER;
  2242.                                      polyTable{8}    : ARRAY OF Point);
  2243. PROCEDURE PolyDrawList   *{gfx,-336}(rp{9}           : RastPortPtr;
  2244.                                      count{0}        : INTEGER;
  2245.                                      coors{8}..      : INTEGER);
  2246. PROCEDURE SetAPen        *{gfx,-342}(rp{9}           : RastPortPtr;
  2247.                                      pen{0}          : INTEGER);
  2248. PROCEDURE SetBPen        *{gfx,-348}(rp{9}           : RastPortPtr;
  2249.                                      pen{0}          : INTEGER);
  2250. PROCEDURE SetDrMd        *{gfx,-354}(rp{9}           : RastPortPtr;
  2251.                                      drawMode{0}     : SHORTSET);
  2252. PROCEDURE InitView       *{gfx,-360}(VAR view{9}     : View);
  2253. PROCEDURE CBump          *{gfx,-366}(copList{9}      : UCopListPtr);
  2254. PROCEDURE CMove          *{gfx,-372}(copList{9}      : UCopListPtr;
  2255.                                      destination{0}  : e.APTR;
  2256.                                      data{1}         : INTEGER);
  2257. PROCEDURE CWait          *{gfx,-378}(copList{9}      : UCopListPtr;
  2258.                                      v{0}            : INTEGER;
  2259.                                      h{1}            : INTEGER);
  2260. PROCEDURE VBeamPos       *{gfx,-384}(): LONGINT;
  2261. PROCEDURE InitBitMap     *{gfx,-390}(VAR bitMap{8}   : BitMap;
  2262.                                      depth{0}        : INTEGER;
  2263.                                      width{1}        : INTEGER;
  2264.                                      height{2}       : INTEGER);
  2265. PROCEDURE ScrollRaster   *{gfx,-396}(rp{9}           : RastPortPtr;
  2266.                                      x{0}            : INTEGER;
  2267.                                      y{1}            : INTEGER;
  2268.                                      xMin{2}         : INTEGER;
  2269.                                      yMin{3}         : INTEGER;
  2270.                                      xMax{4}         : INTEGER;
  2271.                                      yMax{5}         : INTEGER);
  2272. PROCEDURE WaitBOVP       *{gfx,-402}(vp{8}           : ViewPortPtr);
  2273. PROCEDURE GetSprite      *{gfx,-408}(VAR sprite{8}   : SimpleSprite;
  2274.                                      num{0}          : INTEGER): INTEGER;
  2275. PROCEDURE FreeSprite     *{gfx,-414}(num{0}          : INTEGER);
  2276. PROCEDURE ChangeSprite   *{gfx,-420}(vp{8}           : ViewPortPtr;
  2277.                                      VAR sprite{9}   : SimpleSprite;
  2278.                                      newData{10}     : PLANEPTR);
  2279. PROCEDURE MoveSprite     *{gfx,-426}(vo{8}           : ViewPortPtr;
  2280.                                      VAR sprite{9}   : SimpleSprite;
  2281.                                      x{0}            : INTEGER;
  2282.                                      y{1}            : INTEGER);
  2283. PROCEDURE LockLayerRom   *{gfx,-432}(layer{13}       : LayerPtr);
  2284. PROCEDURE UnlockLayerRom *{gfx,-438}(layer{13}       : LayerPtr);
  2285. PROCEDURE SyncSBitMap    *{gfx,-444}(layer{8}        : LayerPtr);
  2286. PROCEDURE CopySBitMap    *{gfx,-450}(layer{8}        : LayerPtr);
  2287. PROCEDURE OwnBlitter     *{gfx,-456}();
  2288. PROCEDURE DisownBlitter  *{gfx,-462}();
  2289. PROCEDURE InitTmpRas     *{gfx,-468}(VAR tmpras{8}   : TmpRas;
  2290.                                      buffer{9}       : PLANEPTR;
  2291.                                      size{0}         : LONGINT);
  2292. PROCEDURE AskFont        *{gfx,-474}(rp{9}           : RastPortPtr;
  2293.                                      textAttr{8}     : TextAttr);
  2294. PROCEDURE AddFont        *{gfx,-480}(textfont{9}     : TextFontPtr);
  2295. PROCEDURE RemFont        *{gfx,-486}(textfont{9}     : TextFontPtr);
  2296. PROCEDURE AllocRaster    *{gfx,-492}(width{0}        : INTEGER;
  2297.                                      height{1}       : INTEGER): PLANEPTR;
  2298. PROCEDURE FreeRaster     *{gfx,-498}(p{8}            : PLANEPTR;
  2299.                                      width{0}        : INTEGER;
  2300.                                      height{1}       : INTEGER);
  2301. PROCEDURE AndRectRegion  *{gfx,-504}(region{8}       : RegionPtr;
  2302.                                      rectangle{9}    : Rectangle);
  2303. PROCEDURE OrRectRegion   *{gfx,-510}(region{8}       : RegionPtr;
  2304.                                      rectangle{9}    : Rectangle): BOOLEAN;
  2305. PROCEDURE NewRegion      *{gfx,-516}(): RegionPtr;
  2306. PROCEDURE ClearRectRegion*{gfx,-522}(region{8}       : RegionPtr;
  2307.                                      rectangle{9}    : Rectangle): BOOLEAN;
  2308. PROCEDURE ClearRegion    *{gfx,-528}(region{8}       : RegionPtr);
  2309. PROCEDURE DisposeRegion  *{gfx,-534}(region{8}       : RegionPtr);
  2310. PROCEDURE FreeVPortCopLists*{gfx,-540}(vp{8}         : ViewPortPtr);
  2311. PROCEDURE FreeCopList    *{gfx,-546}(copList{8}      : CopListDummyPtr);
  2312. PROCEDURE ClipBlit       *{gfx,-552}(srcRP{8}        : RastPortPtr;
  2313.                                      xSrc{0}         : INTEGER;
  2314.                                      ySrc{1}         : INTEGER;
  2315.                                      destRP{9}       : RastPortPtr;
  2316.                                      xDest{2}        : INTEGER;
  2317.                                      yDest{3}        : INTEGER;
  2318.                                      xSize{4}        : INTEGER;
  2319.                                      ySize{5}        : INTEGER;
  2320.                                      minterm{6}      : e.BYTE);
  2321. PROCEDURE XorRectRegion  *{gfx,-558}(region{8}       : RegionPtr;
  2322.                                      rectangle{9}    : Rectangle): BOOLEAN;
  2323. PROCEDURE FreeCprList    *{gfx,-564}(cprlist{8}      : CprlistPtr);
  2324. PROCEDURE GetColorMap    *{gfx,-570}(entries{0}      : LONGINT): ColorMapPtr;
  2325. PROCEDURE FreeColorMap   *{gfx,-576}(colorMap{8}     : ColorMapPtr);
  2326. PROCEDURE GetRGB4        *{gfx,-582}(colorMap{8}     : ColorMapPtr;
  2327.                                      entry{0}        : LONGINT): INTEGER;
  2328. PROCEDURE ScrollVPort    *{gfx,-588}(vp{8}           : ViewPortPtr);
  2329. PROCEDURE UCopperListInit*{gfx,-594}(uCopList{8}     : UCopListPtr;
  2330.                                      n{0}            : LONGINT): CopListDummyPtr;
  2331. PROCEDURE FreeGBuffers   *{gfx,-600}(anOb{8}         : AnimObPtr;
  2332.                                      rp{9}           : RastPortPtr;
  2333.                                      flag{0}         : BOOLEAN);
  2334. PROCEDURE BltBitMapRastPort*{gfx,-606}(srcBitMap{8}  : BitMapPtr;
  2335.                                      xSrc{0}         : INTEGER;
  2336.                                      ySrc{1}         : INTEGER;
  2337.                                      destRP{9}       : RastPortPtr;
  2338.                                      xDest{2}        : INTEGER;
  2339.                                      yDest{3}        : INTEGER;
  2340.                                      xSize{4}        : INTEGER;
  2341.                                      ySize{5}        : INTEGER;
  2342.                                      minterm{6}      : e.BYTE);
  2343. PROCEDURE OrRegionRegion *{gfx,-612}(srcRegion{8}    : RegionPtr;
  2344.                                      destRegion{9}   : RegionPtr): BOOLEAN;
  2345. PROCEDURE XorRegionRegion*{gfx,-618}(srcRegion{8}    : RegionPtr;
  2346.                                      destRegion{9}   : RegionPtr): BOOLEAN;
  2347. PROCEDURE AndRegionRegion*{gfx,-624}(srcRegion{8}    : RegionPtr;
  2348.                                      destRegion{9}   : RegionPtr): BOOLEAN;
  2349. PROCEDURE SetRGB4CM      *{gfx,-630}(colorMap{8}     : ColorMapPtr;
  2350.                                      index{0}        : INTEGER;
  2351.                                      red{1}          : INTEGER;
  2352.                                      green{2}        : INTEGER;
  2353.                                      blue{3}         : INTEGER);
  2354. PROCEDURE BltMaskBitMapRastPort*{gfx,-636}(srcBitMap{8}  : BitMapPtr;
  2355.                                      xSrc{0}         : INTEGER;
  2356.                                      ySrc{1}         : INTEGER;
  2357.                                      destRP{9}       : RastPortPtr;
  2358.                                      xDest{2}        : INTEGER;
  2359.                                      yDest{3}        : INTEGER;
  2360.                                      xSize{4}        : INTEGER;
  2361.                                      ySize{5}        : INTEGER;
  2362.                                      minterm{6}      : e.BYTE;
  2363.                                      bltMask{10}     : PLANEPTR);
  2364. PROCEDURE AttemptLockLayerRom*{gfx,-654}(layer{13}   : LayerPtr): BOOLEAN;
  2365. (* ---   functions in V36 or higher (Release 2.0)    --- *)
  2366. (* --- REMEMBER: You are to check the version BEFORE you use this ! --- *)
  2367.  
  2368. PROCEDURE GfxNew         *{gfx,-660}(gfxNodeType{0}  : LONGINT): ExtendedNodePtr;
  2369. PROCEDURE GfxFree        *{gfx,-666}(gfxNodePtr{8}   : ExtendedNodePtr);
  2370. PROCEDURE GfxAssociate   *{gfx,-672}(associateNode{8}: ExtendedNodePtr;
  2371.                                      gfxNodePtr{9}   : ExtendedNodePtr);
  2372. PROCEDURE BitMapScale    *{gfx,-678}(bitScaleArgs{8} : BitScaleArgsPtr);
  2373. PROCEDURE ScalerDiv      *{gfx,-684}(factor{0}       : LONGINT;
  2374.                                      numerator{1}    : LONGINT;
  2375.                                      denominator{2}  : LONGINT): INTEGER;
  2376. PROCEDURE TextExtent     *{gfx,-690}(rp{9}           : RastPortPtr;
  2377.                                      string{8}       : ARRAY OF CHAR;
  2378.                                      count{0}        : LONGINT;
  2379.                                      VAR textExt{10} : Textextent);
  2380. PROCEDURE TextFit        *{gfx,-696}(rp{9}           : RastPortPtr;
  2381.                                      string{8}       : ARRAY OF CHAR;
  2382.                                      strLen{0}       : LONGINT;
  2383.                                      textExtent{10}  : TextextentPtr;
  2384.                                      constrainingExtent{11} : TextextentPtr;
  2385.                                      strDirection{1} : LONGINT;
  2386.                                      constrainingBitWidth{2} : LONGINT;
  2387.                                      constrainingBitHeight{3} : LONGINT): LONGINT;
  2388. PROCEDURE GfxLookUp      *{gfx,-702}(associateNode{8}: ExtendedNodePtr): e.APTR;
  2389. PROCEDURE VideoControlA  *{gfx,-708}(colorMap{8}     : ColorMapPtr;
  2390.                                      tagarray{9}     : ARRAY OF u.TagItem): BOOLEAN;
  2391. PROCEDURE VideoControl   *{gfx,-708}(colorMap{8}     : ColorMapPtr;
  2392.                                      tags{9}..       : u.Tag): BOOLEAN;
  2393. PROCEDURE OpenMonitor    *{gfx,-714}(monitorName{9}  : ARRAY OF CHAR;
  2394.                                      displayID{0}    : LONGINT): MonitorSpecPtr;
  2395. PROCEDURE CloseMonitor   *{gfx,-720}(monitorSpec{8}  : MonitorSpecPtr): BOOLEAN;
  2396. PROCEDURE FindDisplayInfo*{gfx,-726}(displayID{0}    : LONGINT): DisplayInfoHandle;
  2397. PROCEDURE NextDisplayInfo*{gfx,-732}(displayID{0}    : LONGINT): LONGINT;
  2398. PROCEDURE AddDisplayInfo *{gfx,-738};
  2399. PROCEDURE AddDisplayInfoData*{gfx,-744};
  2400. PROCEDURE SetDisplayInfoData*{gfx,-750}(handle{8}    : DisplayInfoHandle;
  2401.                                         buf{9}       : ARRAY OF e.BYTE;
  2402.                                         size{0}      : LONGINT;
  2403.                                         tagID{1}     : LONGINT;
  2404.                                         displayID{2} : LONGINT): LONGINT;
  2405. PROCEDURE GetDisplayInfoData*{gfx,-756}(handle{8}    : DisplayInfoHandle;
  2406.                                         VAR buf{9}   : ARRAY OF e.BYTE;
  2407.                                         size{0}      : LONGINT;
  2408.                                         tagID{1}     : LONGINT;
  2409.                                         displayID{2} : LONGINT): LONGINT;
  2410. PROCEDURE FontExtent     *{gfx,-762}(font{8}         : TextFontPtr;
  2411.                                      fontExtent{9}   : TextFontExtensionPtr);
  2412. PROCEDURE ReadPixelLine8 *{gfx,-768}(rp{8}           : RastPortPtr;
  2413.                                      xstart{0}       : INTEGER;
  2414.                                      ystart{1}       : INTEGER;
  2415.                                      width{2}        : INTEGER;
  2416.                                      VAR array{10}   : ARRAY OF e.BYTE;
  2417.                                      tempRP{9}       : RastPortPtr): LONGINT;
  2418. PROCEDURE WritePixelLine8*{gfx,-774}(rp{8}           : RastPortPtr;
  2419.                                      xstart{0}       : INTEGER;
  2420.                                      ystart{1}       : INTEGER;
  2421.                                      width{2}        : INTEGER;
  2422.                                      array{10}       : ARRAY OF e.BYTE;
  2423.                                      tempRP{9}       : RastPortPtr): LONGINT;
  2424. PROCEDURE ReadPixelArray8*{gfx,-780}(rp{8}           : RastPortPtr;
  2425.                                      xstart{0}       : INTEGER;
  2426.                                      ystart{1}       : INTEGER;
  2427.                                      xstop{2}        : INTEGER;
  2428.                                      ystop{3}        : INTEGER;
  2429.                                      VAR array{10}   : ARRAY OF e.BYTE;
  2430.                                      tempRP{9}       : RastPortPtr): LONGINT;
  2431. PROCEDURE WritePixelArray8*{gfx,-786}(rp{8}           : RastPortPtr;
  2432.                                      xstart{0}       : INTEGER;
  2433.                                      ystart{1}       : INTEGER;
  2434.                                      xstop{2}        : INTEGER;
  2435.                                      ystop{3}        : INTEGER;
  2436.                                      array{10}       : ARRAY OF e.BYTE;
  2437.                                      tempRP{9}       : RastPortPtr): LONGINT;
  2438. PROCEDURE GetVPModeID    *{gfx,-792}(vp{8}           : ViewPortPtr): LONGINT;
  2439. PROCEDURE ModeNotAvailable*{gfx,-798}(modeID{0}      : LONGINT): LONGINT;
  2440. PROCEDURE WeighTAMatchA  *{gfx,-804}(reqTextAttr{8}  : TextAttr;
  2441.                                      VAR targetTextAttr{9} : TextAttr;
  2442.                                      targetTags{10}  : ARRAY OF u.TagItem): INTEGER;
  2443. PROCEDURE WeighTAMatch   *{gfx,-804}(reqTextAttr{8} : TextAttr;
  2444.                                       VAR targetTextAttr{9} : TextAttr;
  2445.                                       targetTags{10}..      : u.Tag): INTEGER;
  2446. PROCEDURE EraseRect      *{gfx,-810}(rp{9}           : RastPortPtr;
  2447.                                      xMin{0}         : INTEGER;
  2448.                                      yMin{1}         : INTEGER;
  2449.                                      xMax{2}         : INTEGER;
  2450.                                      yMax{3}         : INTEGER);
  2451. PROCEDURE ExtendFontA    *{gfx,-816}(font{8}         : TextFontPtr;
  2452.                                      fontTags{9}     : ARRAY OF u.TagItem): BOOLEAN;
  2453. PROCEDURE ExtendFont     *{gfx,-816}(font{8}         : TextFontPtr;
  2454.                                      fontTags{9}..   : u.Tag): BOOLEAN;
  2455. PROCEDURE StripFont      *{gfx,-822}(font{8}         : TextFontPtr);
  2456.  
  2457. (*--- functions in V39 or higher (Release 3) ---*)
  2458. PROCEDURE CalcIVG        *{gfx,-033CH}(v{8}          : ViewPtr;
  2459.                                        vp{8}         : ViewPortPtr): INTEGER;
  2460. PROCEDURE AttachPalExtra *{gfx,-0342H}(cm{8}         : ColorMapPtr;
  2461.                                        vp{9}         : ViewPortPtr): LONGINT;
  2462. PROCEDURE ObtainBestPenA *{gfx,-0348H}(cm{8}         : ColorMapPtr;
  2463.                                        r{1}          : LONGINT;
  2464.                                        g{2}          : LONGINT;
  2465.                                        b{3}          : LONGINT;
  2466.                                        tags{9}       : ARRAY OF u.TagItem): LONGINT;
  2467. PROCEDURE ObtainBestPen *{gfx,-0348H}(cm{8}          : ColorMapPtr;
  2468.                                        r{1}          : LONGINT;
  2469.                                        g{2}          : LONGINT;
  2470.                                        b{3}          : LONGINT;
  2471.                                        tag1Type{9}.. : u.Tag): LONGINT;
  2472. PROCEDURE SetRGB32       *{gfx,-0354H}(vp{8}         : ViewPortPtr;
  2473.                                        n{0}          : LONGINT;
  2474.                                        r{1}          : LONGINT;
  2475.                                        g{2}          : LONGINT;
  2476.                                        b{3}          : LONGINT);
  2477. PROCEDURE GetAPen        *{gfx,-035AH}(rp{8}         : RastPortPtr): LONGINT;
  2478. PROCEDURE GetBPen        *{gfx,-0360H}(rp{8}         : RastPortPtr): LONGINT;
  2479. PROCEDURE GetDrMd        *{gfx,-0366H}(rp{8}         : RastPortPtr): LONGSET;
  2480. PROCEDURE GetOPen        *{gfx,-036CH}(rp{8}         : RastPortPtr): LONGINT;
  2481. (* synonym for consistency with SetOutlinePen *)
  2482. PROCEDURE GetOutlinePen  *{gfx,-036CH}(rp{8}         : RastPortPtr): LONGINT;
  2483. PROCEDURE LoadRGB32      *{gfx,-0372H}(vp{8}         : ViewPortPtr;
  2484.                                        VAR table{9}  : ARRAY OF LONGINT);
  2485. PROCEDURE SetChipRev     *{gfx,-0378H}(want{0}       : LONGSET): LONGSET;
  2486. PROCEDURE SetABPenDrMd   *{gfx,-037EH}(rp{9}         : RastPortPtr;
  2487.                                        apen{0}       : LONGINT;
  2488.                                        bpen{1}       : LONGINT;
  2489.                                        drawmode{2}   : SHORTSET);
  2490. PROCEDURE GetRGB32       *{gfx,-0384H}(cm{8}         : ColorMapPtr;
  2491.                                        firstcolor{0} : LONGINT;
  2492.                                        ncolors{1}    : LONGINT;
  2493.                                        VAR table{9}  : ARRAY OF LONGINT);
  2494. PROCEDURE AllocBitMap    *{gfx,-0396H}(sizex{0}      : LONGINT;
  2495.                                        sizey{1}      : LONGINT;
  2496.                                        depth{2}      : LONGINT;
  2497.                                        flags{3}      : LONGSET;
  2498.                                        friendBitmap{8}: BitMapPtr): BitMapPtr;
  2499. PROCEDURE FreeBitMap     *{gfx,-039CH}(bm{8}         : BitMapPtr);
  2500. PROCEDURE GetExtSpriteA  *{gfx,-03A2H}(ss{10}        : ExtSpritePtr;
  2501.                                        tags{9}       : ARRAY OF u.TagItem): LONGINT;
  2502. PROCEDURE GetExtSprite   *{gfx,-03A2H}(ss{10}        : ExtSpritePtr;
  2503.                                        tag1Type{9}.. : u.Tag): LONGINT;
  2504. PROCEDURE CoerceMode     *{gfx,-03A8H}(vp{8}         : ViewPortPtr;
  2505.                                        monitorid{0}  : LONGINT;
  2506.                                        flags{7}      : LONGINT): LONGINT;
  2507. PROCEDURE ChangeVPBitMap *{gfx,-03AEH}(vp{8}         : ViewPortPtr;
  2508.                                        bm{9}         : BitMapPtr;
  2509.                                        db{10}        : DBufInfoPtr);
  2510. PROCEDURE ReleasePen     *{gfx,-03B4H}(cm{8}         : ColorMapPtr;
  2511.                                        n{0}          : LONGINT);
  2512. PROCEDURE ObtainPen      *{gfx,-03BAH}(cm{8}         : ColorMapPtr;
  2513.                                        n{0}          : LONGINT;
  2514.                                        r{1}          : LONGINT;
  2515.                                        g{2}          : LONGINT;
  2516.                                        b{3}          : LONGINT;
  2517.                                        f{4}          : LONGSET): LONGINT;
  2518. PROCEDURE GetBitMapAttr  *{gfx,-03C0H}(bm{8}         : BitMapPtr;
  2519.                                        attrnum{1}    : LONGINT): LONGINT;
  2520. PROCEDURE AllocDBufInfo  *{gfx,-03C6H}(vp{8}         : ViewPortPtr): DBufInfoPtr;
  2521. PROCEDURE FreeDBufInfo   *{gfx,-03CCH}(dbi{9}        : DBufInfoPtr);
  2522. PROCEDURE SetOutlinePen  *{gfx,-03D2H}(rp{8}         : RastPortPtr;
  2523.                                        pen{0}        : LONGINT): LONGINT;
  2524. PROCEDURE SetWriteMask   *{gfx,-03D8H}(rp{8}         : RastPortPtr;
  2525.                                        msk{0}        : LONGSET): BOOLEAN;
  2526. PROCEDURE SetMaxPen      *{gfx,-03DEH}(rp{8}         : RastPortPtr;
  2527.                                        maxpen{0}     : LONGINT);
  2528. PROCEDURE SetRGB32CM     *{gfx,-03E4H}(cm{8}         : ColorMapPtr;
  2529.                                        n{0}          : LONGINT;
  2530.                                        r{1}          : LONGINT;
  2531.                                        g{2}          : LONGINT;
  2532.                                        b{3}          : LONGINT);
  2533. PROCEDURE ScrollRasterBF *{gfx,-03EAH}(rp{9}         : RastPortPtr;
  2534.                                        dx{0}         : LONGINT;
  2535.                                        dy{1}         : LONGINT;
  2536.                                        xMin{2}       : LONGINT;
  2537.                                        yMin{3}       : LONGINT;
  2538.                                        xMax{4}       : LONGINT;
  2539.                                        yMax{5}       : LONGINT);
  2540. PROCEDURE FindColor      *{gfx,-03F0H}(cm{11}        : ColorMapPtr;
  2541.                                        r{1}          : LONGINT;
  2542.                                        g{2}          : LONGINT;
  2543.                                        b{3}          : LONGINT;
  2544.                                        maxcolor{4}   : LONGINT): LONGINT;
  2545. PROCEDURE AllocSpriteDataA*{gfx,-03FCH}(bm{10}       : BitMapPtr;
  2546.                                        tags{9}       : ARRAY OF u.TagItem): ExtSpritePtr;
  2547. PROCEDURE AllocSpriteData*{gfx,-03FCH}(bm{10}        : BitMapPtr;
  2548.                                        tag1Type{9}.. : u.Tag): ExtSpritePtr;
  2549. PROCEDURE ChangeExtSpriteA*{gfx,-0402H}(vp{8}        : ViewPortPtr;
  2550.                                        oldsprite{9}  : ExtSpritePtr;
  2551.                                        newsprite{10} : ExtSpritePtr;
  2552.                                        tags{11}      : ARRAY OF u.TagItem): BOOLEAN;
  2553. PROCEDURE ChangeExtSprite*{gfx,-402H}(vp{8}          : ViewPortPtr;
  2554.                                        oldsprite{9}  : ExtSpritePtr;
  2555.                                        newsprite{10} : ExtSpritePtr;
  2556.                                        tag1Type{11}..: u.Tag): BOOLEAN;
  2557. PROCEDURE FreeSpriteData *{gfx,-0408H}(sp{10}        : ExtSpritePtr);
  2558. PROCEDURE SetRPAttrsA    *{gfx,-040EH}(rp{8}         : RastPortPtr;
  2559.                                        tags{9}       : ARRAY OF u.TagItem);
  2560. PROCEDURE SetRPAttrs     *{gfx,-040EH}(rp{8}         : RastPortPtr;
  2561.                                         tag1Type{9}..: u.Tag);
  2562. PROCEDURE GetRPAttrsA    *{gfx,-0414H}(rp{8}         : RastPortPtr;
  2563.                                        tags{9}       : ARRAY OF u.TagItem);
  2564. PROCEDURE GetRPAttrs     *{gfx,-0414H}(rp{8}         : RastPortPtr;
  2565.                                        tag1Type{9}.. : u.Tag);
  2566. PROCEDURE BestModeIDA    *{gfx,-041AH}(tags{8}       : ARRAY OF u.TagItem): LONGINT;
  2567. PROCEDURE BestModeID     *{gfx,-041AH}(tag1Type{8}.. : u.Tag): LONGINT;
  2568. (*--- functions in V40 or higher (Release 3.1) ---*)
  2569. PROCEDURE WriteChunkyPixels*{gfx,-420H}(rp{8}        : RastPortPtr;
  2570.                                        xStart{0}     : LONGINT;
  2571.                                        yStart{1}     : LONGINT;
  2572.                                        xStop{2}      : LONGINT;
  2573.                                        yStop{3}      : LONGINT;
  2574.                                        array{9}      : ARRAY OF e.BYTE;
  2575.                                        bytesPerRow{5}: LONGINT);
  2576.  
  2577. (* $OvflChk- $RangeChk- $StackChk- $NilChk- $ReturnChk- $CaseChk- *)
  2578.  
  2579. (* This macro is obsolete as of V39. AllocBitMap() should be used for allocating
  2580.    bitmap data, since it knows about the machine's particular alignment
  2581.    restrictions.
  2582. *)
  2583. PROCEDURE RASSIZE * (w{0}, h{1}: INTEGER): LONGINT;
  2584. BEGIN RETURN (LONG(w)+15) DIV 16 * 2 * h; END RASSIZE;
  2585.  
  2586. (* ************************************************************************ *)
  2587.  
  2588. (* these are GEL functions that are currently simple enough to exist as a
  2589.  *  definition.  It should not be assumed that this will always be the case
  2590.  *)
  2591.  
  2592. PROCEDURE InitAnimate * (VAR anKey{8}: AnimObPtr);
  2593. BEGIN anKey := NIL; END InitAnimate;
  2594.  
  2595. PROCEDURE RemBob * (b{8}: BobPtr);
  2596. BEGIN INCL(b.flags,bobsAway); END RemBob;
  2597.  
  2598. PROCEDURE OnDisplay*;  BEGIN h.custom.dmacon := {h.dmaSet,h.raster} END OnDisplay;
  2599.  
  2600. PROCEDURE OffDisplay*; BEGIN h.custom.dmacon :=          {h.raster} END OffDisplay;
  2601.  
  2602. PROCEDURE OnSprite*;   BEGIN h.custom.dmacon := {h.dmaSet,h.sprite} END OnSprite;
  2603.  
  2604. PROCEDURE OffSprite*;  BEGIN h.custom.dmacon :=          {h.sprite} END OffSprite;
  2605.  
  2606. PROCEDURE OnVBlank*;   BEGIN h.custom.intena := {h.dmaSet,h.vertb } END OnVBlank;
  2607.  
  2608. PROCEDURE OffVBlank*;  BEGIN h.custom.intena :=          {h.vertb } END OffVBlank;
  2609.  
  2610. PROCEDURE SetOPen*(w{8}: RastPortPtr; c{0}: e.BYTE);
  2611. BEGIN w.aOlPen := c; INCL(w.flags,areaOutline); END SetOPen;
  2612.  
  2613. PROCEDURE SetDrPt*(w{8}: RastPortPtr; p{0}: INTEGER);
  2614. BEGIN w.linePtrn := p; INCL(w.flags,firstDot); w.linPatCnt := 15; END SetDrPt;
  2615.  
  2616. PROCEDURE SetWrMsk*(w{8}: RastPortPtr; m{8}: SHORTSET);
  2617. BEGIN w.mask := m END SetWrMsk;
  2618.  
  2619. (* the SafeSetxxx macros are backwards (pre V39 graphics) compatible versions *)
  2620. (* using these macros will make your code do the right thing under V39 AND V37 *)
  2621.  
  2622. PROCEDURE SafeSetOutlinePen * (w{8}: RastPortPtr; c{0}: e.BYTE);
  2623. BEGIN
  2624.   IF gfx.libNode.version<39 THEN w.aOlPen := c; INCL(w.flags,areaOutline);
  2625.   ELSIF SetOutlinePen(w,ORD(c)) = 0 THEN END;
  2626. END SafeSetOutlinePen;
  2627.  
  2628.  
  2629. PROCEDURE SafeSetWriteMask * (w{8}: RastPortPtr; m{0}: SHORTSET);
  2630.   PROCEDURE MySetWriteMask{gfx,-03D8H}(rp{8}: RastPortPtr; msk{0}: SHORTSET);
  2631. BEGIN
  2632.   IF gfx.libNode.version<39 THEN w.mask := m;
  2633.   ELSE MySetWriteMask(w,m); END;
  2634. END SafeSetWriteMask;
  2635.  
  2636. PROCEDURE SetAfPt*(w{8}: RastPortPtr; p{9}: e.ADDRESS; n{0}: e.BYTE);
  2637. BEGIN w.areaPtrn := p; w.areaPtSz := n; END SetAfPt;
  2638.  
  2639. PROCEDURE BndryOff*(w{8}: RastPortPtr);
  2640. BEGIN EXCL(w.flags,areaOutline) END BndryOff;
  2641.  
  2642. PROCEDURE CINIT*(c{8}: UCopListPtr; n{0}: LONGINT);
  2643. BEGIN IF UCopperListInit(c,n)=NIL THEN END END CINIT;
  2644.  
  2645. PROCEDURE CMOVE*(c{9}: UCopListPtr; a{0}: e.ADDRESS; b{1}: INTEGER);
  2646. BEGIN CMove(c,a,b); CBump(c) END CMOVE;
  2647.  
  2648. PROCEDURE CWAIT*(c{9}: UCopListPtr; a{0},b{1}: INTEGER);
  2649. BEGIN CWait(c,a,b); CBump(c) END CWAIT;
  2650.  
  2651. PROCEDURE CEND*(c{9}: UCopListPtr);
  2652. BEGIN CWAIT(c,10000,255) END CEND;
  2653.  
  2654. PROCEDURE DrawCircle*(rp{9}: RastPortPtr; cx{0},cy{1}: INTEGER; r{2}: INTEGER);
  2655. BEGIN DrawEllipse(rp,cx,cy,r,r); END DrawCircle;
  2656.  
  2657. PROCEDURE AreaCircle*(rp{9}: RastPortPtr; cx{0},cy{1}: INTEGER; r{2}: INTEGER): BOOLEAN;
  2658. BEGIN RETURN AreaEllipse(rp,cx,cy,r,r); END AreaCircle;
  2659.  
  2660. (*-------------------------------------------------------------------------*)
  2661.  
  2662. BEGIN
  2663.   gfx :=  e.OpenLibrary(graphicsName,33);
  2664.   IF gfx = NIL THEN HALT(20) END;
  2665.   base := gfx;
  2666.  
  2667. CLOSE
  2668.   IF gfx#NIL THEN e.CloseLibrary(gfx) END;
  2669.  
  2670. END Graphics.
  2671.  
  2672.